Path connectedness #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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 fromxtoy, i.e., continuous maps fromItoXmapping0toxand1toy.path.mapis the image of a path under a continuous map.joined (x y : X)means there is a path betweenxandy.joined.some_path (h : joined x y)selects some path between two pointsxandy.path_component (x : X)is the set of points joined tox.path_connected_space Xis a predicate class asserting thatXis non-empty and every two points ofXare joined.
Then there are corresponding relative notions for F : set X.
joined_in F (x y : X)means there is a pathγjoiningxtoywith values inF.joined_in.some_path (h : joined_in F x y)selects a path fromxtoyinsideF.path_component_in F (x : X)is the set of points joined toxinF.is_path_connected Fasserts thatFis non-empty and every two points ofFare joined inF.loc_path_connected_space Xis a predicate class asserting thatXis 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.
path_connected_space_iff_univ : path_connected_space X ↔ is_path_connected (univ : set X)is_path_connected_iff_path_connected_space : is_path_connected F ↔ path_connected_space ↥F
For locally path connected spaces, we have
path_connected_space_iff_connected_space : path_connected_space X ↔ connected_space Xis_connected_iff_is_path_connected (U_op : is_open U) : is_path_connected U ↔ is_connected U
Implementation notes #
By default, all paths have I as their source and X as their target, but there is an
operation set.Icc_extend that will extend any continuous map γ : I → X into a continuous map
Icc_extend 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 #
- to_continuous_map : C(↥unit_interval, X)
- source' : self.to_continuous_map.to_fun 0 = x
- target' : self.to_continuous_map.to_fun 1 = y
Continuous path connecting two points x and y in a topological space
Instances for path
Equations
- path.has_coe_to_fun = {coe := λ (p : path x y), p.to_continuous_map.to_fun}
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 γ = ⇑γ
Any function φ : Π (a : α), path (x a) (y a) can be seen as a function α × I → X.
The constant path from a point to itself
Equations
- path.refl x = {to_continuous_map := {to_fun := λ (t : ↥unit_interval), x, continuous_to_fun := _}, source' := _, target' := _}
The reverse of a path from x to y, as a path from y to x
Equations
- γ.symm = {to_continuous_map := {to_fun := ⇑γ ∘ unit_interval.symm, continuous_to_fun := _}, source' := _, target' := _}
Space of paths #
Equations
- path.continuous_map.has_coe = {coe := λ (γ : path x y), γ.to_continuous_map}
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.
A continuous map extending a path to ℝ, constant before 0 and after 1.
Equations
- γ.extend = set.Icc_extend path.extend._proof_1 ⇑γ
A useful special case of continuous.path_extend.
The path obtained from a map defined on ℝ by restriction to the unit interval.
Equations
- path.of_line hf h₀ h₁ = {to_continuous_map := {to_fun := f ∘ coe, continuous_to_fun := _}, source' := h₀, target' := h₁}
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].
Image of a path from x to y by a continuous map
Casting a path from x to y to a path from x' to y' when x' = x and y' = y
Equations
- γ.cast hx hy = {to_continuous_map := {to_fun := ⇑γ, continuous_to_fun := _}, source' := _, target' := _}
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
- γ₁.prod γ₂ = {to_continuous_map := γ₁.to_continuous_map.prod_mk γ₂.to_continuous_map, source' := _, target' := _}
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 γ = {to_continuous_map := continuous_map.pi (λ (i : ι), (γ i).to_continuous_map), source' := _, target' := _}
Pointwise multiplication/addition of two paths in a topological (additive) group #
Pointwise addition of paths in a topological additive group.
Equations
- γ₁.add γ₂ = (γ₁.prod γ₂).map continuous_add
Pointwise multiplication of paths in a topological group. The additive version is probably more useful.
Equations
- γ₁.mul γ₂ = (γ₁.prod γ₂).map continuous_mul
Truncating a path #
γ.truncate t₀ t₁ is the path which follows the path γ on the
time interval [t₀, t₁] and stays still otherwise.
Equations
- γ.truncate t₀ t₁ = {to_continuous_map := {to_fun := λ (s : ↥unit_interval), γ.extend (linear_order.min (linear_order.max ↑s t₀) t₁), continuous_to_fun := _}, source' := _, target' := _}
γ.truncate_of_le t₀ t₁ h, where h : t₀ ≤ t₁ is γ.truncate t₀ t₁
casted as a path from γ.extend t₀ to γ.extend t₁.
Equations
- γ.truncate_of_le h = (γ.truncate t₀ t₁).cast _ _
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.
Being joined by a path #
When two points are joined, choose some path from x to y.
Equations
- h.some_path = nonempty.some h
The setoid corresponding the equivalence relation of being joined by a continuous path.
The quotient type of points of a topological space modulo being joined by a continuous path.
Equations
- zeroth_homotopy X = quotient (path_setoid X)
Instances for zeroth_homotopy
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.
When x and y are joined in F, choose a path from x to y inside F
Equations
- h.some_path = classical.some h
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
- path_component x = {y : X | joined x y}
The path component of x in F is the set of points that can be joined to x in F.
Equations
- path_component_in x F = {y : X | joined_in F x y}
Path connected sets #
A set F is path connected if it contains a point that can be joined to all other in F.
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 #
A topological space is path-connected if it is non-empty and every two points can be joined by a continuous path.
Use path-connectedness to build a path between two points.