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 paths. In addition, we define a relation
homotopic on paths, and prove that it is an equivalence relation.
Definitions #
path.homotopy p₀ p₁is the type of homotopies between pathsp₀andp₁path.homotopy.refl pis the constant homotopy betweenpand itselfpath.homotopy.symm Fis 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 onpaths frompath.homotopicpath.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 paths 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' := _}