Homotopy between paths #
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
- p₀.Homotopy p₁ = p₀.HomotopyRel p₁.toContinuousMap {0, 1}
Instances For
Evaluating a path homotopy at an intermediate point, giving us a Path
.
Equations
- F.eval t = { toFun := ⇑(F.curry t), continuous_toFun := ⋯, source' := ⋯, target' := ⋯ }
Instances For
Given a path p
, we can define a Homotopy p p
by F (t, x) = p x
.
Equations
- Path.Homotopy.refl p = ContinuousMap.HomotopyRel.refl p.toContinuousMap {0, 1}
Instances For
Given a Homotopy p₀ p₁
, we can define a Homotopy p₁ p₀
by reversing the homotopy.
Equations
- F.symm = ContinuousMap.HomotopyRel.symm F
Instances For
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 = ContinuousMap.HomotopyRel.trans F G
Instances For
Casting a Homotopy p₀ p₁
to a Homotopy q₀ q₁
where p₀ = q₀
and p₁ = q₁
.
Equations
- F.cast h₀ h₁ = ContinuousMap.HomotopyRel.cast F ⋯ ⋯
Instances For
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
- One or more equations did not get rendered due to their size.
Instances For
Suppose p
is a path, then we have a homotopy from p
to p.reparam f
by the convexity of I
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Suppose F : Homotopy p q
. Then we have a Homotopy p.symm q.symm
by reversing the second
argument.
Equations
- F.symm₂ = { toFun := fun (x : ↑unitInterval × ↑unitInterval) => F (x.1, unitInterval.symm x.2), continuous_toFun := ⋯, map_zero_left := ⋯, map_one_left := ⋯, prop' := ⋯ }
Instances For
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
Instances For
Two paths p₀
and p₁
are Path.Homotopic
if there exists a Homotopy
between them.
Instances For
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, iseqv := ⋯ }
Instances For
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
Equations
- Path.Homotopic.instInhabitedQuotientUnitUnit = { default := Quotient.mk' (Path.refl ()) }
The composition of path homotopy classes. This is Path.trans
descended to the quotient.
Equations
- P₀.comp P₁ = Quotient.map₂ Path.trans ⋯ P₀ P₁
Instances For
The image of a path homotopy class P₀
under a map f
.
This is Path.map
descended to the quotient.
Equations
- P₀.mapFn f = Quotient.map (fun (q : Path x₀ x₁) => q.map ⋯) ⋯ P₀
Instances For
A path Path x₀ x₁
generates a homotopy between constant functions fun _ ↦ x₀
and
fun _ ↦ x₁
.
Equations
- p.toHomotopyConst = { toContinuousMap := p.comp ContinuousMap.fst, map_zero_left := ⋯, map_one_left := ⋯ }
Instances For
Two constant continuous maps with nonempty domain are homotopic if and only if their values are joined by a path in the codomain.
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.evalAt x = { toFun := fun (t : ↑unitInterval) => H (t, x), continuous_toFun := ⋯, source' := ⋯, target' := ⋯ }