Path connectedness #
Main definitions #
In the file the unit interval [0, 1]
in ℝ
is denoted by I
, and X
is a topological space.
Path (x y : X)
is the type of paths fromx
toy
, i.e., continuous maps fromI
toX
mapping0
tox
and1
toy
.Path.map
is the image of a path under a continuous map.Joined (x y : X)
means there is a path betweenx
andy
.Joined.somePath (h : Joined x y)
selects some path between two pointsx
andy
.pathComponent (x : X)
is the set of points joined tox
.PathConnectedSpace X
is a predicate class asserting thatX
is non-empty and every two points ofX
are joined.
Then there are corresponding relative notions for F : Set X
.
JoinedIn F (x y : X)
means there is a pathγ
joiningx
toy
with values inF
.JoinedIn.somePath (h : JoinedIn F x y)
selects a path fromx
toy
insideF
.pathComponentIn F (x : X)
is the set of points joined tox
inF
.IsPathConnected F
asserts thatF
is non-empty and every two points ofF
are joined inF
.LocPathConnectedSpace X
is a predicate class asserting thatX
is locally path-connected: each point has a basis of path-connected neighborhoods (we do not ask these to be open).
## Main theorems
One can link the absolute and relative version in two directions, using (univ : Set X)
or the
subtype ↥F
.
pathConnectedSpace_iff_univ : PathConnectedSpace X ↔ IsPathConnected (univ : Set X)
isPathConnected_iff_pathConnectedSpace : IsPathConnected F ↔ PathConnectedSpace ↥F
For locally path connected spaces, we have
pathConnectedSpace_iff_connectedSpace : PathConnectedSpace X ↔ ConnectedSpace X
IsOpen.isConnected_iff_isPathConnected (U_op : IsOpen U) : IsPathConnected U ↔ IsConnected U
Implementation notes #
By default, all paths have I
as their source and X
as their target, but there is an
operation Set.IccExtend
that will extend any continuous map γ : I → X
into a continuous map
IccExtend zero_le_one γ : ℝ → X
that is constant before 0
and after 1
.
This is used to define Path.extend
that turns γ : Path x y
into a continuous map
γ.extend : ℝ → X
whose restriction to I
is the original γ
, and is equal to x
on (-∞, 0]
and to y
on [1, +∞)
.
Paths #
- toFun : ↑unitInterval → X
- continuous_toFun : Continuous s.toFun
- source' : ContinuousMap.toFun s.toContinuousMap 0 = x
The start point of a
Path
. - target' : ContinuousMap.toFun s.toContinuousMap 1 = y
The end point of a
Path
.
Continuous path connecting two points x
and y
in a topological space
Instances For
Equations
- Path.continuousMapClass = ContinuousMapClass.mk (_ : ∀ (γ : Path x y), Continuous ↑γ)
See Note [custom simps projection]. We need to specify this projection explicitly in this case, because it is a composition of multiple projections.
Equations
- Path.simps.apply γ = ↑γ
Instances For
Any function φ : Π (a : α), Path (x a) (y a)
can be seen as a function α × I → X
.
Equations
- Path.hasUncurryPath = { uncurry := fun φ p => ↑(φ p.fst) p.snd }
The constant path from a point to itself
Equations
- One or more equations did not get rendered due to their size.
Instances For
Space of paths #
The following instance defines the topology on the path space to be induced from the
compact-open topology on the space C(I,X)
of continuous maps from I
to X
.
Equations
- Path.topologicalSpace = TopologicalSpace.induced toContinuousMap ContinuousMap.compactOpen
A continuous map extending a path to ℝ
, constant before 0
and after 1
.
Equations
Instances For
See Note [continuity lemma statement].
A useful special case of Continuous.path_extend
.
The path obtained from a map defined on ℝ
by restriction to the unit interval.
Equations
- Path.ofLine hf h₀ h₁ = { toContinuousMap := ContinuousMap.mk (f ∘ Subtype.val), source' := h₀, target' := h₁ }
Instances For
Concatenation of two paths from x
to y
and from y
to z
, putting the first
path on [0, 1/2]
and the second one on [1/2, 1]
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Image of a path from x
to y
by a map which is continuous on the path.
Equations
Instances For
Image of a path from x
to y
by a continuous map
Equations
- Path.map γ h = Path.map' γ (_ : ContinuousOn f (Set.range ↑γ))
Instances For
Casting a path from x
to y
to a path from x'
to y'
when x' = x
and y' = y
Equations
- Path.cast γ hx hy = { toContinuousMap := ContinuousMap.mk ↑γ, source' := (_ : ↑γ 0 = x'), target' := (_ : ↑γ 1 = y') }
Instances For
Product of paths #
Given a path in X
and a path in Y
, we can take their pointwise product to get a path in
X × Y
.
Equations
- Path.prod γ₁ γ₂ = { toContinuousMap := ContinuousMap.prodMk γ₁.toContinuousMap γ₂.toContinuousMap, source' := (_ : (↑γ₁ 0, ↑γ₂ 0) = (a₁, b₁)), target' := (_ : (↑γ₁ 1, ↑γ₂ 1) = (a₂, b₂)) }
Instances For
Path composition commutes with products
Given a family of paths, one in each Xᵢ, we take their pointwise product to get a path in Π i, Xᵢ.
Equations
- Path.pi γ = { toContinuousMap := ContinuousMap.pi fun i => (γ i).toContinuousMap, source' := (_ : (fun x => ↑(γ x) 0) = as), target' := (_ : (fun x => ↑(γ x) 1) = bs) }
Instances For
Path composition commutes with products
Pointwise multiplication/addition of two paths in a topological (additive) group #
Pointwise addition of paths in a topological additive group.
Instances For
Pointwise multiplication of paths in a topological group. The additive version is probably more useful.
Instances For
Truncating a path #
γ.truncate t₀ t₁
is the path which follows the path γ
on the
time interval [t₀, t₁]
and stays still otherwise.
Equations
- One or more equations did not get rendered due to their size.
Instances For
γ.truncateOfLE t₀ t₁ h
, where h : t₀ ≤ t₁
is γ.truncate t₀ t₁
casted as a path from γ.extend t₀
to γ.extend t₁
.
Equations
- Path.truncateOfLE γ h = Path.cast (Path.truncate γ t₀ t₁) (_ : Path.extend γ t₀ = Path.extend γ (min t₀ t₁)) (_ : Path.extend γ t₁ = Path.extend γ t₁)
Instances For
For a path γ
, γ.truncate
gives a "continuous family of paths", by which we
mean the uncurried function which maps (t₀, t₁, s)
to γ.truncate t₀ t₁ s
is continuous.
Reparametrising a path #
Given a path γ
and a function f : I → I
where f 0 = 0
and f 1 = 1
, γ.reparam f
is the
path defined by γ ∘ f
.
Equations
- Path.reparam γ f hfcont hf₀ hf₁ = { toContinuousMap := ContinuousMap.mk (↑γ ∘ f), source' := (_ : ↑γ (f 0) = x), target' := (_ : ↑γ (f 1) = y) }
Instances For
Being joined by a path #
When two points are joined, choose some path from x
to y
.
Equations
Instances For
The setoid corresponding the equivalence relation of being joined by a continuous path.
Equations
- pathSetoid X = { r := Joined, iseqv := (_ : Equivalence Joined) }
Instances For
The quotient type of points of a topological space modulo being joined by a continuous path.
Equations
- ZerothHomotopy X = Quotient (pathSetoid X)
Instances For
Equations
- ZerothHomotopy.inhabited = { default := Quotient.mk' 0 }
Being joined by a path inside a set #
The relation "being joined by a path in F
". Not quite an equivalence relation since it's not
reflexive for points that do not belong to F
.
Equations
- JoinedIn F x y = ∃ γ, ∀ (t : ↑unitInterval), ↑γ t ∈ F
Instances For
When x
and y
are joined in F
, choose a path from x
to y
inside F
Equations
Instances For
If x
and y
are joined in the set F
, then they are joined in the subtype F
.
Path component #
The path component of x
is the set of points that can be joined to x
.
Equations
- pathComponent x = {y | Joined x y}
Instances For
The path component of x
in F
is the set of points that can be joined to x
in F
.
Equations
- pathComponentIn x F = {y | JoinedIn F x y}
Instances For
Path connected sets #
A set F
is path connected if it contains a point that can be joined to all other in F
.
Instances For
If a set W
is path-connected, then it is also path-connected when seen as a set in a smaller
ambient type U
(when U
contains W
).
Path connected spaces #
Use path-connectedness to build a path between two points.
Equations
- PathConnectedSpace.somePath x y = Nonempty.some (_ : Joined x y)
Instances For
This is a special case of NormedSpace.instPathConnectedSpace
(and
TopologicalAddGroup.pathConnectedSpace
). It exists only to simplify dependencies.
Locally path connected spaces #
- path_connected_basis : ∀ (x : X), Filter.HasBasis (nhds x) (fun s => s ∈ nhds x ∧ IsPathConnected s) id
Each neighborhood filter has a basis of path-connected neighborhoods.
A topological space is locally path connected, at every point, path connected neighborhoods form a neighborhood basis.