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
- Path.Homotopy p₀ p₁ = ContinuousMap.HomotopyRel p₀.toContinuousMap p₁.toContinuousMap {0, 1}
Instances For
Evaluating a path homotopy at an intermediate point, giving us a Path
.
Equations
- Path.Homotopy.eval F t = { toContinuousMap := ContinuousMap.mk ⇑((ContinuousMap.Homotopy.curry F.toHomotopy) t), source' := (_ : F (t, 0) = x₀), target' := (_ : F (t, 1) = x₁) }
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
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
Instances For
Casting a Homotopy p₀ p₁
to a Homotopy q₀ q₁
where p₀ = q₀
and p₁ = q₁
.
Equations
- Path.Homotopy.cast F h₀ h₁ = ContinuousMap.HomotopyRel.cast F (_ : p₀.toContinuousMap = q₀.toContinuousMap) (_ : p₁.toContinuousMap = q₁.toContinuousMap)
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
- One or more equations did not get rendered due to their size.
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
- One or more equations did not get rendered due to their size.
Instances For
Two paths p₀
and p₁
are Path.Homotopic
if there exists a Homotopy
between them.
Equations
- Path.Homotopic p₀ p₁ = Nonempty (Path.Homotopy p₀ p₁)
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 := (_ : Equivalence Path.Homotopic) }
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
The composition of path homotopy classes. This is Path.trans
descended to the quotient.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The image of a path homotopy class P₀
under a map f
.
This is Path.map
descended to the quotient.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A path Path x₀ x₁
generates a homotopy between constant functions fun _ ↦ x₀
and
fun _ ↦ x₁
.
Equations
- Path.toHomotopyConst p = { toContinuousMap := ContinuousMap.comp p.toContinuousMap ContinuousMap.fst, map_zero_left := (_ : Y → p 0 = x₀), map_one_left := (_ : Y → p 1 = x₁) }
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
- ContinuousMap.Homotopy.evalAt H x = { toContinuousMap := ContinuousMap.mk fun (t : ↑unitInterval) => H (t, x), source' := (_ : H (0, x) = f x), target' := (_ : H (1, x) = g x) }