Homotopy between paths #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
In this file, we define a homotopy
between two path
s. In addition, we define a relation
homotopic
on path
s, and prove that it is an equivalence relation.
Definitions #
path.homotopy p₀ p₁
is the type of homotopies between pathsp₀
andp₁
path.homotopy.refl p
is the constant homotopy betweenp
and itselfpath.homotopy.symm F
is thepath.homotopy p₁ p₀
defined by reversing the homotopypath.homotopy.trans F G
, whereF : path.homotopy p₀ p₁
,G : path.homotopy p₁ p₂
is thepath.homotopy p₀ p₂
defined by putting the first homotopy on[0, 1/2]
and the second on[1/2, 1]
path.homotopy.hcomp F G
, whereF : path.homotopy p₀ q₀
andG : path.homotopy p₁ q₁
is apath.homotopy (p₀.trans p₁) (q₀.trans q₁)
path.homotopic p₀ p₁
is the relation saying that there is a homotopy betweenp₀
andp₁
path.homotopic.setoid x₀ x₁
is the setoid onpath
s frompath.homotopic
path.homotopic.quotient x₀ x₁
is the quotient type frompath x₀ x₀
bypath.homotopic.setoid
The type of homotopies between two paths.
Equations
- path.homotopy.has_coe_to_fun = {coe := λ (F : p₀.homotopy p₁), F.to_homotopy.to_continuous_map.to_fun}
Evaluating a path homotopy at an intermediate point, giving us a path
.
Equations
- F.eval t = {to_continuous_map := {to_fun := ⇑(⇑(F.to_homotopy.curry) t), continuous_to_fun := _}, source' := _, target' := _}
Given a path p
, we can define a homotopy p p
by F (t, x) = p x
Equations
Given a homotopy p₀ p₁
, we can define a homotopy p₁ p₀
by reversing the homotopy.
Equations
Given homotopy p₀ p₁
and homotopy p₁ p₂
, we can define a homotopy p₀ p₂
by putting the first
homotopy on [0, 1/2]
and the second on [1/2, 1]
.
Equations
- F.trans G = continuous_map.homotopy_rel.trans F G
Casting a homotopy p₀ p₁
to a homotopy q₀ q₁
where p₀ = q₀
and p₁ = q₁
.
Equations
- F.cast h₀ h₁ = continuous_map.homotopy_rel.cast F _ _
Suppose p₀
and q₀
are paths from x₀
to x₁
, p₁
and q₁
are paths from x₁
to x₂
.
Furthermore, suppose F : homotopy p₀ q₀
and G : homotopy p₁ q₁
. Then we can define a homotopy
from p₀.trans p₁
to q₀.trans q₁
.
Equations
- F.hcomp G = {to_homotopy := {to_continuous_map := {to_fun := λ (x : ↥unit_interval × ↥unit_interval), ite (↑(x.snd) ≤ 1 / 2) ((F.eval x.fst).extend (2 * ↑(x.snd))) ((G.eval x.fst).extend (2 * ↑(x.snd) - 1)), continuous_to_fun := _}, map_zero_left' := _, map_one_left' := _}, prop' := _}
Suppose p
is a path, then we have a homotopy from p
to p.reparam f
by the convexity of I
.
Equations
- path.homotopy.reparam p f hf hf₀ hf₁ = {to_homotopy := {to_continuous_map := {to_fun := λ (x : ↥unit_interval × ↥unit_interval), ⇑p ⟨↑(unit_interval.symm x.fst) * ↑(x.snd) + ↑(x.fst) * ↑(f x.snd), _⟩, continuous_to_fun := _}, map_zero_left' := _, map_one_left' := _}, prop' := _}
Suppose F : homotopy p q
. Then we have a homotopy p.symm q.symm
by reversing the second
argument.
Equations
- F.symm₂ = {to_homotopy := {to_continuous_map := {to_fun := λ (x : ↥unit_interval × ↥unit_interval), ⇑F (x.fst, unit_interval.symm x.snd), continuous_to_fun := _}, map_zero_left' := _, map_one_left' := _}, prop' := _}
Given F : homotopy p q
, and f : C(X, Y)
, we can define a homotopy from p.map f.continuous
to
q.map f.continuous
.
Equations
- F.map f = {to_homotopy := {to_continuous_map := {to_fun := ⇑f ∘ ⇑F, continuous_to_fun := _}, map_zero_left' := _, map_one_left' := _}, prop' := _}
Two paths p₀
and p₁
are path.homotopic
if there exists a homotopy
between them.
The setoid on path
s defined by the equivalence relation path.homotopic
. That is, two paths are
equivalent if there is a homotopy
between them.
Equations
- path.homotopic.setoid x₀ x₁ = {r := path.homotopic x₁, iseqv := _}
The quotient on path x₀ x₁
by the equivalence relation path.homotopic
.
Equations
- path.homotopic.quotient x₀ x₁ = quotient (path.homotopic.setoid x₀ x₁)
Instances for path.homotopic.quotient
The composition of path homotopy classes. This is path.trans
descended to the quotient.
Equations
- P₀.comp P₁ = quotient.map₂ path.trans path.homotopic.quotient.comp._proof_1 P₀ P₁
The image of a path homotopy class P₀
under a map f
.
This is path.map
descended to the quotient
Equations
- P₀.map_fn f = quotient.map (λ (q : path x₀ x₁), q.map _) _ P₀
Given a homotopy H: f ∼ g, get the path traced by the point x
as it moves from
f x
to g x
Equations
- H.eval_at x = {to_continuous_map := {to_fun := λ (t : ↥unit_interval), ⇑H (t, x), continuous_to_fun := _}, source' := _, target' := _}