Knots, links and ambient isotopy
StructureParametrized knot#✓fully proved
An oriented parametrized smooth knot in Euclidean 3-space is a \(C^\infty\) curve \(\gamma \colon \mathbb{R} \to \mathbb{R}^3\) that is \(2\pi\)-periodic (\(\gamma(t + 2\pi) = \gamma(t)\) for all \(t\)), injective on \([0, 2\pi)\), and an immersion (\(\gamma'(t) \neq 0\) for all \(t\)).
structure ParametrizedKnot where
curve : ℝ → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
immersion : ∀ t, deriv curve t ≠ 0
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
MathlibExt/Geometry/Euclidean/Ropelength.lean:47
curve : ℝ → R3
MathlibExt/Topology/Knot/EuclideanLink.lean:59
Uses 1 · Used by 26
StructureParametrized link#✓fully proved
An oriented labeled parametrized smooth link with \(n\) components in Euclidean 3-space is a family \((\gamma_i)_{i < n}\) of parametrized knots whose traces \(\gamma_i(\mathbb{R})\) are pairwise disjoint.
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
structure ParametrizedKnot where
curve : ℝ → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
immersion : ∀ t, deriv curve t ≠ 0
MathlibExt/Topology/Knot/EuclideanLink.lean:58
component : Fin n → ParametrizedKnot
MathlibExt/Topology/Knot/EuclideanLink.lean:68
Uses 2 · Used by 61
StructureSmooth ambient isotopy of Euclidean 3-space#✓fully proved
A smooth ambient isotopy of \(\mathbb{R}^3\) consists of two families of maps \(H_t, G_t \colon \mathbb{R}^3 \to \mathbb{R}^3\), indexed by times \(t \in \mathbb{R}\), such that \((t, x) \mapsto H_t(x)\) and \((t, x) \mapsto G_t(x)\) are \(C^\infty\) on \(\mathbb{R} \times \mathbb{R}^3\), \(G_t(H_t(x)) = x\) and \(H_t(G_t(x)) = x\) for all \(t\) and \(x\), and \(H_0\) is the identity.
structure AmbientIsotopy where
H : ℝ → R3 → R3
Hinv : ℝ → R3 → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
inv_left : ∀ t x, Hinv t (H t x) = x
inv_right : ∀ t x, H t (Hinv t x) = x
start : H 0 = id
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
MathlibExt/Geometry/Euclidean/Ropelength.lean:47
H : ℝ → R3 → R3
MathlibExt/Topology/Knot/EuclideanLink.lean:75
Hinv : ℝ → R3 → R3
MathlibExt/Topology/Knot/EuclideanLink.lean:76
Uses 1 · Used by 16
DefinitionIdentity ambient isotopy#✓fully proved
The identity ambient isotopy of \(\mathbb{R}^3\) has forward and inverse families \(H_t\) and \(G_t\) equal to the identity map of \(\mathbb{R}^3\) for every time \(t\).
MathlibExt.Topology.Knot.Euclidean.AmbientIsotopy.id · 20 lines
def AmbientIsotopy.id : AmbientIsotopy where
H := fun _ => _root_.id
Hinv := fun _ => _root_.id
smooth := by
have hfun : Function.uncurry (fun _ => _root_.id) =
(Prod.snd : ℝ × R3 → R3) := by
funext ⟨t, x⟩
rfl
rw [hfun]
exact contDiff_snd
smooth_inv := by
have hfun : Function.uncurry (fun _ => _root_.id) =
(Prod.snd : ℝ × R3 → R3) := by
funext ⟨t, x⟩
rfl
rw [hfun]
exact contDiff_snd
inv_left := fun _ _ => rfl
inv_right := fun _ _ => rfl
start := rfl
structure AmbientIsotopy where
H : ℝ → R3 → R3
Hinv : ℝ → R3 → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
inv_left : ∀ t x, Hinv t (H t x) = x
inv_right : ∀ t x, H t (Hinv t x) = x
start : H 0 = id
MathlibExt/Topology/Knot/EuclideanLink.lean:74
DefinitionInverse ambient isotopy#✓fully proved
The inverse of an ambient isotopy with forward family \((H_t)\) and inverse family \((H_t^{-1})\) is the ambient isotopy whose forward family is \((H_t^{-1})\) and whose inverse family is \((H_t)\); at each time \(t\) it is the inverse diffeomorphism of \(H_t\).
def AmbientIsotopy.symm (Φ : AmbientIsotopy) : AmbientIsotopy where
H := Φ.Hinv
Hinv := Φ.H
smooth := Φ.smooth_inv
smooth_inv := Φ.smooth
inv_left := Φ.inv_right
inv_right := Φ.inv_left
start := by
funext x
have h := Φ.inv_right 0 x
rw [Φ.start] at h
exact h
structure AmbientIsotopy where
H : ℝ → R3 → R3
Hinv : ℝ → R3 → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
inv_left : ∀ t x, Hinv t (H t x) = x
inv_right : ∀ t x, H t (Hinv t x) = x
start : H 0 = id
MathlibExt/Topology/Knot/EuclideanLink.lean:74
Uses 2 · Used by 2
DefinitionComposition of ambient isotopies#✓fully proved
If \(\Phi\) and \(\Psi\) are smooth ambient isotopies of \(\mathbb{R}^3\) with forward families \(H_t, H'_t\) and inverse families \(G_t, G'_t\), their composition (first \(\Phi\), then \(\Psi\), at the same time parameter) is the ambient isotopy with forward family \(H'_t \circ H_t\) and inverse family \(G_t \circ G'_t\).
MathlibExt.Topology.Knot.Euclidean.AmbientIsotopy.comp · 32 lines
def AmbientIsotopy.comp (Φ Ψ : AmbientIsotopy) : AmbientIsotopy where
H := fun t x => Ψ.H t (Φ.H t x)
Hinv := fun t x => Φ.Hinv t (Ψ.Hinv t x)
smooth := by
have hpre : ContDiff ℝ (⊤ : ℕ∞)
(fun p : ℝ × R3 => (p.1, Φ.H p.1 p.2)) :=
contDiff_fst.prodMk Φ.smooth
have hfun : Function.uncurry (fun t x => Ψ.H t (Φ.H t x)) =
fun p : ℝ × R3 => Ψ.H p.1 (Φ.H p.1 p.2) := by
funext ⟨t, x⟩
rfl
rw [hfun]
exact Ψ.smooth.comp hpre
smooth_inv := by
have hpre : ContDiff ℝ (⊤ : ℕ∞)
(fun p : ℝ × R3 => (p.1, Ψ.Hinv p.1 p.2)) :=
contDiff_fst.prodMk Ψ.smooth_inv
have hfun : Function.uncurry (fun t x => Φ.Hinv t (Ψ.Hinv t x)) =
fun p : ℝ × R3 => Φ.Hinv p.1 (Ψ.Hinv p.1 p.2) := by
funext ⟨t, x⟩
rfl
rw [hfun]
exact Φ.smooth_inv.comp hpre
inv_left := by
intro t x
simp [Φ.inv_left, Ψ.inv_left]
inv_right := by
intro t x
simp [Φ.inv_right, Ψ.inv_right]
start := by
funext x
simp [Φ.start, Ψ.start]
structure AmbientIsotopy where
H : ℝ → R3 → R3
Hinv : ℝ → R3 → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
inv_left : ∀ t x, Hinv t (H t x) = x
inv_right : ∀ t x, H t (Hinv t x) = x
start : H 0 = id
MathlibExt/Topology/Knot/EuclideanLink.lean:74
Uses 2 · Used by 3
StructureOrientation-preserving reparametrization of the circle#✓fully proved
An orientation-preserving smooth reparametrization of the circle is given by maps \(f, g \colon \mathbb{R} \to \mathbb{R}\), both \(C^\infty\) and inverse to each other (\(g(f(t)) = t\) and \(f(g(t)) = t\) for all \(t\)), such that \(f(t + 2\pi) = f(t) + 2\pi\) and \(g(t + 2\pi) = g(t) + 2\pi\) for all \(t\), and \(f\) is strictly increasing. Here \(f\) is a lift of the reparametrization and \(g\) is a lift of its inverse.
structure CircleReparam where
f : ℝ → ℝ
finv : ℝ → ℝ
smooth : ContDiff ℝ (⊤ : ℕ∞) f
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
left_inv : ∀ t, finv (f t) = t
right_inv : ∀ t, f (finv t) = t
periodic : ∀ t, f (t + 2 * Real.pi) = f t + 2 * Real.pi
periodic_inv : ∀ t, finv (t + 2 * Real.pi) = finv t + 2 * Real.pi
mono : StrictMono f
f : ℝ → ℝ
MathlibExt/Topology/Knot/EuclideanLink.lean:158
finv : ℝ → ℝ
MathlibExt/Topology/Knot/EuclideanLink.lean:159
Used by 16
DefinitionIdentity reparametrization of the circle#✓fully proved
The identity circle reparametrization has lift and inverse lift both equal to the identity map of \(\mathbb{R}\).
def CircleReparam.id : CircleReparam where
f := _root_.id
finv := _root_.id
smooth := contDiff_id
smooth_inv := contDiff_id
left_inv := fun _ => rfl
right_inv := fun _ => rfl
periodic := fun _ => rfl
periodic_inv := fun _ => rfl
mono := strictMono_id
structure CircleReparam where
f : ℝ → ℝ
finv : ℝ → ℝ
smooth : ContDiff ℝ (⊤ : ℕ∞) f
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
left_inv : ∀ t, finv (f t) = t
right_inv : ∀ t, f (finv t) = t
periodic : ∀ t, f (t + 2 * Real.pi) = f t + 2 * Real.pi
periodic_inv : ∀ t, finv (t + 2 * Real.pi) = finv t + 2 * Real.pi
mono : StrictMono f
MathlibExt/Topology/Knot/EuclideanLink.lean:157
DefinitionInverse circle reparametrization#✓fully proved
The inverse of a circle reparametrization with lift \(f\) and inverse lift \(f^{-1}\) is the circle reparametrization whose lift is \(f^{-1}\) and whose inverse lift is \(f\).
MathlibExt.Topology.Knot.Euclidean.CircleReparam.symm · 16 lines
def CircleReparam.symm (σ : CircleReparam) : CircleReparam where
f := σ.finv
finv := σ.f
smooth := σ.smooth_inv
smooth_inv := σ.smooth
left_inv := σ.right_inv
right_inv := σ.left_inv
periodic := σ.periodic_inv
periodic_inv := σ.periodic
mono := by
intro a b hab
by_contra hnot
have hle : σ.finv b ≤ σ.finv a := le_of_not_gt hnot
have hmono := σ.mono.monotone hle
rw [σ.right_inv, σ.right_inv] at hmono
exact not_lt_of_ge hmono hab
structure CircleReparam where
f : ℝ → ℝ
finv : ℝ → ℝ
smooth : ContDiff ℝ (⊤ : ℕ∞) f
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
left_inv : ∀ t, finv (f t) = t
right_inv : ∀ t, f (finv t) = t
periodic : ∀ t, f (t + 2 * Real.pi) = f t + 2 * Real.pi
periodic_inv : ∀ t, finv (t + 2 * Real.pi) = finv t + 2 * Real.pi
mono : StrictMono f
MathlibExt/Topology/Knot/EuclideanLink.lean:157
Uses 1 · Used by 2
DefinitionComposition of circle reparametrizations#✓fully proved
If \(\sigma\) and \(\tau\) are circle reparametrizations with lifts \(f_\sigma, f_\tau\) and inverse lifts \(g_\sigma, g_\tau\), their composition (first \(\sigma\), then \(\tau\)) is the circle reparametrization with lift \(f_\tau \circ f_\sigma\) and inverse lift \(g_\sigma \circ g_\tau\).
MathlibExt.Topology.Knot.Euclidean.CircleReparam.comp · 18 lines
def CircleReparam.comp (σ τ : CircleReparam) : CircleReparam where
f := τ.f ∘ σ.f
finv := σ.finv ∘ τ.finv
smooth := τ.smooth.comp σ.smooth
smooth_inv := σ.smooth_inv.comp τ.smooth_inv
left_inv := by
intro t
simp [τ.left_inv, σ.left_inv]
right_inv := by
intro t
simp [σ.right_inv, τ.right_inv]
periodic := by
intro t
simp [σ.periodic, τ.periodic]
periodic_inv := by
intro t
simp [τ.periodic_inv, σ.periodic_inv]
mono := τ.mono.comp σ.mono
structure CircleReparam where
f : ℝ → ℝ
finv : ℝ → ℝ
smooth : ContDiff ℝ (⊤ : ℕ∞) f
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
left_inv : ∀ t, finv (f t) = t
right_inv : ∀ t, f (finv t) = t
periodic : ∀ t, f (t + 2 * Real.pi) = f t + 2 * Real.pi
periodic_inv : ∀ t, finv (t + 2 * Real.pi) = finv t + 2 * Real.pi
mono : StrictMono f
MathlibExt/Topology/Knot/EuclideanLink.lean:157
Uses 1 · Used by 3
DefinitionIsotopy of parametrized knots#✓fully proved
Two parametrized knots \(\gamma_1, \gamma_2\) in \(\mathbb{R}^3\) are isotopic (oriented ambient isotopy) if there are a smooth ambient isotopy of \(\mathbb{R}^3\) with forward family \(H_t\) and an orientation-preserving reparametrization of the circle with lift \(f\) such that \(H_1(\gamma_1(t)) = \gamma_2(f(t))\) for every \(t \in \mathbb{R}\).
def ParametrizedKnot.Isotopic (K₁ K₂ : ParametrizedKnot) : Prop :=
∃ Φ : AmbientIsotopy, ∃ σ : CircleReparam,
∀ t, Φ.H 1 (K₁.curve t) = K₂.curve (σ.f t)
structure ParametrizedKnot where
curve : ℝ → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
immersion : ∀ t, deriv curve t ≠ 0
MathlibExt/Topology/Knot/EuclideanLink.lean:58
structure AmbientIsotopy where
H : ℝ → R3 → R3
Hinv : ℝ → R3 → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
inv_left : ∀ t x, Hinv t (H t x) = x
inv_right : ∀ t x, H t (Hinv t x) = x
start : H 0 = id
MathlibExt/Topology/Knot/EuclideanLink.lean:74
structure CircleReparam where
f : ℝ → ℝ
finv : ℝ → ℝ
smooth : ContDiff ℝ (⊤ : ℕ∞) f
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
left_inv : ∀ t, finv (f t) = t
right_inv : ∀ t, f (finv t) = t
periodic : ∀ t, f (t + 2 * Real.pi) = f t + 2 * Real.pi
periodic_inv : ∀ t, finv (t + 2 * Real.pi) = finv t + 2 * Real.pi
mono : StrictMono f
MathlibExt/Topology/Knot/EuclideanLink.lean:157
DefinitionIsotopy of parametrized links#✓fully proved
Two parametrized links in \(\mathbb{R}^3\) with \(n\) components \(\gamma^1_i\) and \(\gamma^2_i\) (\(i < n\)) are isotopic (oriented, labeled ambient isotopy) if there are a single smooth ambient isotopy of \(\mathbb{R}^3\) with forward family \(H_t\) and, for each \(i < n\), an orientation-preserving reparametrization of the circle with lift \(f_i\), such that \(H_1(\gamma^1_i(t)) = \gamma^2_i(f_i(t))\) for every \(i < n\) and every \(t \in \mathbb{R}\).
def ParametrizedLink.Isotopic {n : ℕ}
(L₁ L₂ : ParametrizedLink n) : Prop :=
∃ Φ : AmbientIsotopy, ∃ σ : Fin n → CircleReparam,
∀ i t, Φ.H 1 ((L₁.component i).curve t) =
(L₂.component i).curve ((σ i).f t)
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
MathlibExt/Topology/Knot/EuclideanLink.lean:67
structure AmbientIsotopy where
H : ℝ → R3 → R3
Hinv : ℝ → R3 → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
inv_left : ∀ t x, Hinv t (H t x) = x
inv_right : ∀ t x, H t (Hinv t x) = x
start : H 0 = id
MathlibExt/Topology/Knot/EuclideanLink.lean:74
structure CircleReparam where
f : ℝ → ℝ
finv : ℝ → ℝ
smooth : ContDiff ℝ (⊤ : ℕ∞) f
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
left_inv : ∀ t, finv (f t) = t
right_inv : ∀ t, f (finv t) = t
periodic : ∀ t, f (t + 2 * Real.pi) = f t + 2 * Real.pi
periodic_inv : ∀ t, finv (t + 2 * Real.pi) = finv t + 2 * Real.pi
mono : StrictMono f
MathlibExt/Topology/Knot/EuclideanLink.lean:157
Uses 5 · Used by 16
DefinitionTrace of a parametrized link#✓fully proved
The trace of a parametrized link \(L\) in Euclidean 3-space is the union of the images of its component curves: the set of all points \(\gamma(t)\), where \(\gamma\) is a component of \(L\) and \(t \in \mathbb{R}\).
def ParametrizedLink.trace {n : ℕ} (L : ParametrizedLink n) : Set R3 :=
⋃ i, Set.range (L.component i).curve
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
MathlibExt/Topology/Knot/EuclideanLink.lean:67
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
MathlibExt/Geometry/Euclidean/Ropelength.lean:47
Uses 3 · Used by 2
DefinitionTotal contour length of a parametrized link#✓fully proved
Let \(L\) be a parametrized link in Euclidean 3-space with components \(\gamma_1, \dots, \gamma_n\), each a \(2\pi\)-periodic curve. The total contour length of \(L\) is the sum over all components \(\gamma_i\) of the contour length of \(\gamma_i\) on one period \([0, 2\pi]\). It is a value in \([0, \infty]\).
noncomputable def ParametrizedLink.totalContourLength {n : ℕ}
(L : ParametrizedLink n) : ENNReal :=
∑ i, contourLength (L.component i).curve 0 (2 * Real.pi)
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
MathlibExt/Topology/Knot/EuclideanLink.lean:67
noncomputable def contourLength (γ : ℝ → R3) (a b : ℝ) : ENNReal :=
eVariationOn γ (Set.Icc a b)
MathlibExt/Geometry/Euclidean/Ropelength.lean:285
Uses 4 · Used by 1
DefinitionRopelength ratio of a parametrized link#✓fully proved
For a parametrized link \(L\), the ropelength ratio of \(L\) is its total contour length divided by the thickness of its trace (the union of the images of its components), a value in \([0, \infty]\) computed with the division of \([0, \infty]\).
noncomputable def ParametrizedLink.ropelengthRatio {n : ℕ}
(L : ParametrizedLink n) : ENNReal :=
L.totalContourLength / thickness L.trace
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
MathlibExt/Topology/Knot/EuclideanLink.lean:67
noncomputable def thickness (s : Set R3) : ENNReal :=
⨅ p ∈ s, ⨅ q ∈ s, ⨅ r ∈ s, circumradiusENN p q r
MathlibExt/Geometry/Euclidean/Ropelength.lean:233
Uses 4 · Used by 4
DefinitionRopelength of a parametrized link#✓fully proved
For a parametrized link \(L\) with \(n\) components, the ropelength of \(L\) is the infimum, in \([0, \infty]\), of the ropelength ratios of all parametrized links \(L'\) with \(n\) components that are isotopic to \(L\). It is the ropelength of the oriented, labeled ambient-isotopy type of \(L\).
noncomputable def ParametrizedLink.ropelength {n : ℕ}
(L : ParametrizedLink n) : ENNReal :=
⨅ L' : ParametrizedLink n, ⨅ _ : L'.Isotopic L, L'.ropelengthRatio
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
MathlibExt/Topology/Knot/EuclideanLink.lean:67
Uses 3 · Used by 10
TheoremRopelength is at most the ratio of any isotopic link#✓fully proved
Let \(L\) and \(L'\) be parametrized links with \(n\) components. If \(L'\) is isotopic to \(L\), then the ropelength of \(L\) is at most the ropelength ratio of \(L'\).
theorem ParametrizedLink.ropelength_le_ratio_of_isotopic {n : ℕ}
{L L' : ParametrizedLink n} (h : L'.Isotopic L) :
L.ropelength ≤ L'.ropelengthRatio
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
MathlibExt/Topology/Knot/EuclideanLink.lean:67
Uses 4 · Used by 2
TheoremRopelength is at most the ropelength ratio#✓fully proved
For every parametrized link \(L\) with \(n\) components, the ropelength of \(L\) is at most the ropelength ratio of \(L\).
theorem ParametrizedLink.ropelength_le_ratio_self {n : ℕ}
(L : ParametrizedLink n) : L.ropelength ≤ L.ropelengthRatio
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
MathlibExt/Topology/Knot/EuclideanLink.lean:67
Uses 11
TheoremRopelength is an isotopy invariant#✓fully proved
Let \(L_1\) and \(L_2\) be parametrized links with \(n\) components. If \(L_1\) is isotopic to \(L_2\) (by an oriented, labeled ambient isotopy), then the ropelength of \(L_1\) equals the ropelength of \(L_2\).
theorem ParametrizedLink.ropelength_eq_of_isotopic {n : ℕ}
{L₁ L₂ : ParametrizedLink n} (h : L₁.Isotopic L₂) :
L₁.ropelength = L₂.ropelength
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
MathlibExt/Topology/Knot/EuclideanLink.lean:67
Uses 13
DefinitionParametrized knot as a one-component link#✓fully proved
A parametrized knot \(K\) determines the parametrized link with one component, whose single component is \(K\); the pairwise disjointness condition holds trivially.
def ParametrizedKnot.toLink (K : ParametrizedKnot) : ParametrizedLink 1 where
component := fun _ => K
pairwiseDisjoint := by
intro i _ j _ hij
exact (hij (Subsingleton.elim i j)).elim
structure ParametrizedKnot where
curve : ℝ → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
immersion : ∀ t, deriv curve t ≠ 0
MathlibExt/Topology/Knot/EuclideanLink.lean:58
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
MathlibExt/Topology/Knot/EuclideanLink.lean:67
Uses 3 · Used by 2
TheoremIsotopic knots give isotopic one-component links#✓fully proved
If \(K_1\) and \(K_2\) are parametrized knots and \(K_1\) is isotopic to \(K_2\), then the one-component parametrized link of \(K_1\) is isotopic to the one-component parametrized link of \(K_2\).
theorem ParametrizedKnot.Isotopic.toLink {K₁ K₂ : ParametrizedKnot}
(h : K₁.Isotopic K₂) : K₁.toLink.Isotopic K₂.toLink
structure ParametrizedKnot where
curve : ℝ → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
immersion : ∀ t, deriv curve t ≠ 0
MathlibExt/Topology/Knot/EuclideanLink.lean:58
DefinitionRopelength of a parametrized knot#✓fully proved
The ropelength of a parametrized knot \(K\) is the ropelength of the one-component parametrized link determined by \(K\): the infimum, in \([0, \infty]\), of the ropelength ratios of all one-component parametrized links that are isotopic to the one-component link of \(K\).
noncomputable def ParametrizedKnot.ropelength (K : ParametrizedKnot) :
ENNReal :=
K.toLink.ropelength
structure ParametrizedKnot where
curve : ℝ → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
immersion : ∀ t, deriv curve t ≠ 0
MathlibExt/Topology/Knot/EuclideanLink.lean:58
Uses 3
AbbreviationEuclidean space \(\mathbb{R}^3\)#✓fully proved
The ambient space of the knots here is \(\mathbb{R}^3\) with its standard Euclidean inner product.
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
Used by 43
StructureOriented smooth knot#✓fully proved
An oriented smooth knot in \(\mathbb{R}^3\) is a smooth map \(\gamma : \mathbb{R} \to \mathbb{R}^3\) that is \(2\pi\)-periodic, injective on \([0, 2\pi)\), and an immersion, meaning \(\gamma'(t) \ne 0\) for every real \(t\). The orientation is the one induced by the parametrization.
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
curve : ℝ → R3
WantedExt/Topology/ConwayKnotShared.lean:80
Uses 1 · Used by 28
StructureTwo-component link#✓fully proved
An oriented two-component smooth link in \(\mathbb{R}^3\) is a pair \((K, L)\) of oriented smooth knots whose images in \(\mathbb{R}^3\) are disjoint.
structure TwoLink where
/-- The first component. -/
K : Knot
/-- The second component. -/
L : Knot
/-- The two components have disjoint images in `ℝ³`. -/
disjoint : Disjoint (Set.range K.curve) (Set.range L.curve)
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
K : Knot
WantedExt/Topology/ConwayKnotShared.lean:94
L : Knot
WantedExt/Topology/ConwayKnotShared.lean:96
Uses 2 · Used by 5
StructureSmooth ambient isotopy of \(\mathbb{R}^3\)#✓fully proved
A smooth ambient isotopy of \(\mathbb{R}^3\) consists of two families of maps \(H_t, G_t \colon \mathbb{R}^3 \to \mathbb{R}^3\) indexed by \(t \in \mathbb{R}\) such that \((t, x) \mapsto H_t(x)\) and \((t, x) \mapsto G_t(x)\) are smooth (\(C^\infty\)) maps \(\mathbb{R} \times \mathbb{R}^3 \to \mathbb{R}^3\), \(G_t\) is a two-sided inverse of \(H_t\) for every \(t\), and \(H_0\) is the identity. In particular every \(H_t\) is a diffeomorphism of \(\mathbb{R}^3\).
MathlibExt.Topology.ConwayKnotShared.KnotTheory.AmbientIsotopy · 15 lines
structure AmbientIsotopy where
/-- The forward family. -/
H : ℝ → R3 → R3
/-- The inverse family. -/
Hinv : ℝ → R3 → R3
/-- The forward family is jointly smooth in `(t, x)`. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
/-- The inverse family is jointly smooth in `(t, x)`. -/
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
/-- `Hinv t` is a left inverse of `H t`. -/
inv_left : ∀ t x, Hinv t (H t x) = x
/-- `Hinv t` is a right inverse of `H t`. -/
inv_right : ∀ t x, H t (Hinv t x) = x
/-- The isotopy starts at the identity. -/
start : H 0 = id
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
H : ℝ → R3 → R3
WantedExt/Topology/ConwayKnotShared.lean:105
Hinv : ℝ → R3 → R3
WantedExt/Topology/ConwayKnotShared.lean:107
Uses 1 · Used by 8
DefinitionAmbient isotopy of oriented knots#✓fully proved
Let \(K_1\) and \(K_2\) be oriented knots, each given by its \(2\pi\)-periodic parametrization. They are ambient-isotopic if there are a smooth ambient isotopy \((\Phi_t)_{t \in \mathbb{R}}\) of \(\mathbb{R}^3\) and an orientation-preserving smooth reparametrization \(\sigma\) of the circle such that \(\Phi_1(K_1(t)) = K_2(\sigma(t))\) for every real \(t\). Here an orientation-preserving smooth reparametrization of the circle is a smooth, strictly increasing bijection \(\sigma : \mathbb{R} \to \mathbb{R}\) with smooth inverse such that \(\sigma(t + 2\pi) = \sigma(t) + 2\pi\) for every \(t\).
def Knot.Isotopic (K₁ K₂ : Knot) : Prop :=
∃ Φ : AmbientIsotopy, ∃ σ : CircleReparam, ∀ t, Φ.H 1 (K₁.curve t) = K₂.curve (σ.f t)
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
structure AmbientIsotopy where
/-- The forward family. -/
H : ℝ → R3 → R3
/-- The inverse family. -/
Hinv : ℝ → R3 → R3
/-- The forward family is jointly smooth in `(t, x)`. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
/-- The inverse family is jointly smooth in `(t, x)`. -/
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
/-- `Hinv t` is a left inverse of `H t`. -/
inv_left : ∀ t x, Hinv t (H t x) = x
/-- `Hinv t` is a right inverse of `H t`. -/
⋯
WantedExt/Topology/ConwayKnotShared.lean:103
structure CircleReparam where
/-- A lift `ℝ → ℝ` of a circle self-map. -/
f : ℝ → ℝ
/-- A lifted inverse. -/
finv : ℝ → ℝ
/-- The lift is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) f
/-- The inverse lift is smooth. -/
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
/-- `finv` is a left inverse to `f`. -/
left_inv : ∀ t, finv (f t) = t
/-- `finv` is a right inverse to `f`. -/
⋯
WantedExt/Topology/ConwayKnotShared.lean:119
Uses 3 · Used by 3
DefinitionAmbient isotopy of oriented two-component links#✓fully proved
Let \(L = (K, J)\) and \(L' = (K', J')\) be oriented two-component links, each knot given by its \(2\pi\)-periodic parametrization. Then \(L\) and \(L'\) are ambient-isotopic if there are a smooth ambient isotopy \((\Phi_t)_{t \in \mathbb{R}}\) of \(\mathbb{R}^3\) and orientation-preserving smooth reparametrizations \(\sigma\), \(\tau\) of the circle such that \(\Phi_1(K(t)) = K'(\sigma(t))\) and \(\Phi_1(J(t)) = J'(\tau(t))\) for every real \(t\). Here an orientation-preserving smooth reparametrization of the circle is a smooth, strictly increasing bijection \(\sigma : \mathbb{R} \to \mathbb{R}\) with smooth inverse such that \(\sigma(t + 2\pi) = \sigma(t) + 2\pi\) for every \(t\).
def TwoLink.Isotopic (L₁ L₂ : TwoLink) : Prop :=
∃ Φ : AmbientIsotopy, ∃ σ τ : CircleReparam,
(∀ t, Φ.H 1 (L₁.K.curve t) = L₂.K.curve (σ.f t)) ∧
(∀ t, Φ.H 1 (L₁.L.curve t) = L₂.L.curve (τ.f t))
structure TwoLink where
/-- The first component. -/
K : Knot
/-- The second component. -/
L : Knot
/-- The two components have disjoint images in `ℝ³`. -/
disjoint : Disjoint (Set.range K.curve) (Set.range L.curve)
WantedExt/Topology/ConwayKnotShared.lean:92
structure AmbientIsotopy where
/-- The forward family. -/
H : ℝ → R3 → R3
/-- The inverse family. -/
Hinv : ℝ → R3 → R3
/-- The forward family is jointly smooth in `(t, x)`. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
/-- The inverse family is jointly smooth in `(t, x)`. -/
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
/-- `Hinv t` is a left inverse of `H t`. -/
inv_left : ∀ t x, Hinv t (H t x) = x
/-- `Hinv t` is a right inverse of `H t`. -/
⋯
WantedExt/Topology/ConwayKnotShared.lean:103
structure CircleReparam where
/-- A lift `ℝ → ℝ` of a circle self-map. -/
f : ℝ → ℝ
/-- A lifted inverse. -/
finv : ℝ → ℝ
/-- The lift is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) f
/-- The inverse lift is smooth. -/
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
/-- `finv` is a left inverse to `f`. -/
left_inv : ∀ t, finv (f t) = t
/-- `finv` is a right inverse to `f`. -/
⋯
WantedExt/Topology/ConwayKnotShared.lean:119
Uses 4 · Used by 2
DefinitionReflection in the \(xy\)-plane#✓fully proved
The reflection of \(\mathbb{R}^3\) through the \(xy\)-plane is the map \((x, y, z) \mapsto (x, y, -z)\).
def reflectZ (p : R3) : R3 :=
WithLp.toLp 2 (fun i : Fin 3 => if i = 2 then -p.ofLp i else p.ofLp i)
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
Uses 1 · Used by 1
DefinitionChiral knot#✓fully proved
Let \(K \colon \mathbb{R} \to \mathbb{R}^3\) be an oriented smooth knot, and let \(\rho(x, y, z) = (x, y, -z)\) be the reflection of \(\mathbb{R}^3\) through the \(xy\)-plane. Call \(\sigma \colon \mathbb{R} \to \mathbb{R}\) an orientation-preserving reparametrization of the circle if it is a strictly increasing smooth bijection with smooth inverse satisfying \(\sigma(t + 2\pi) = \sigma(t) + 2\pi\) for all \(t \in \mathbb{R}\), that is, the lift of an orientation-preserving diffeomorphism of \(\mathbb{R} / 2\pi\mathbb{Z}\). The knot \(K\) is chiral if there is no smooth ambient isotopy \((H_t)\) of \(\mathbb{R}^3\) together with such a \(\sigma\) satisfying \(H_1(K(t)) = \rho(K(\sigma(t)))\) for all \(t \in \mathbb{R}\). Equivalently, \(K\) is not ambient isotopic, as an oriented knot, to its mirror image \(\rho \circ K\).
def Knot.Chiral (K : Knot) : Prop :=
¬ ∃ Φ : AmbientIsotopy, ∃ σ : CircleReparam,
∀ t, Φ.H 1 (K.curve t) = reflectZ (K.curve (σ.f t))
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
structure AmbientIsotopy where
/-- The forward family. -/
H : ℝ → R3 → R3
/-- The inverse family. -/
Hinv : ℝ → R3 → R3
/-- The forward family is jointly smooth in `(t, x)`. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
/-- The inverse family is jointly smooth in `(t, x)`. -/
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
/-- `Hinv t` is a left inverse of `H t`. -/
inv_left : ∀ t x, Hinv t (H t x) = x
/-- `Hinv t` is a right inverse of `H t`. -/
⋯
WantedExt/Topology/ConwayKnotShared.lean:103
structure CircleReparam where
/-- A lift `ℝ → ℝ` of a circle self-map. -/
f : ℝ → ℝ
/-- A lifted inverse. -/
finv : ℝ → ℝ
/-- The lift is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) f
/-- The inverse lift is smooth. -/
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
/-- `finv` is a left inverse to `f`. -/
left_inv : ∀ t, finv (f t) = t
/-- `finv` is a right inverse to `f`. -/
⋯
WantedExt/Topology/ConwayKnotShared.lean:119
def reflectZ (p : R3) : R3 :=
WithLp.toLp 2 (fun i : Fin 3 => if i = 2 then -p.ofLp i else p.ofLp i)
WantedExt/Topology/ConwayKnotShared.lean:154
Uses 4 · Used by 1
StructureTopological ambient isotopy#✓fully proved
A topological ambient isotopy of \(\mathbb{R}^3\) is a family of maps \(H_t : \mathbb{R}^3 \to \mathbb{R}^3\), indexed by \(t \in \mathbb{R}\), together with a family \(G_t : \mathbb{R}^3 \to \mathbb{R}^3\) such that \((t, x) \mapsto H_t(x)\) and \((t, x) \mapsto G_t(x)\) are continuous, \(G_t\) is a two-sided inverse of \(H_t\) for every \(t\) (so each \(H_t\) is a homeomorphism of \(\mathbb{R}^3\)), and \(H_0\) is the identity.
The time domain is all of \(\mathbb{R}\), but only \(H_0\) and \(H_1\) matter for the isotopy relation.
MathlibExt.Topology.ConwayKnotShared.KnotTheory.TopAmbientIsotopy · 15 lines
structure TopAmbientIsotopy where
/-- The forward family. -/
H : ℝ → R3 → R3
/-- The inverse family. -/
Hinv : ℝ → R3 → R3
/-- The forward family is jointly continuous in `(t, x)`. -/
continuous : Continuous (Function.uncurry H)
/-- The inverse family is jointly continuous in `(t, x)`. -/
continuous_inv : Continuous (Function.uncurry Hinv)
/-- `Hinv t` is a left inverse of `H t`. -/
inv_left : ∀ t x, Hinv t (H t x) = x
/-- `Hinv t` is a right inverse of `H t`. -/
inv_right : ∀ t x, H t (Hinv t x) = x
/-- The isotopy starts at the identity. -/
start : H 0 = id
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
H : ℝ → R3 → R3
WantedExt/Topology/ConwayKnotShared.lean:197
Hinv : ℝ → R3 → R3
WantedExt/Topology/ConwayKnotShared.lean:199
Uses 1 · Used by 1
DefinitionTopological ambient isotopy of subsets#✓fully proved
Two subsets \(A\) and \(B\) of \(\mathbb{R}^3\) are unoriented topologically ambient isotopic if there is a topological ambient isotopy \((H_t)\) of \(\mathbb{R}^3\) whose time-one map carries \(A\) onto \(B\), that is, \(H_1(A) = B\).
"Unoriented" because this is a set-level relation that forgets any parametrization.
def Set.UnorientedTopAmbIsotopic (A B : Set R3) : Prop :=
∃ Φ : TopAmbientIsotopy, Φ.H 1 '' A = B
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
structure TopAmbientIsotopy where
/-- The forward family. -/
H : ℝ → R3 → R3
/-- The inverse family. -/
Hinv : ℝ → R3 → R3
/-- The forward family is jointly continuous in `(t, x)`. -/
continuous : Continuous (Function.uncurry H)
/-- The inverse family is jointly continuous in `(t, x)`. -/
continuous_inv : Continuous (Function.uncurry Hinv)
/-- `Hinv t` is a left inverse of `H t`. -/
inv_left : ∀ t x, Hinv t (H t x) = x
/-- `Hinv t` is a right inverse of `H t`. -/
⋯
WantedExt/Topology/ConwayKnotShared.lean:195
Uses 2 · Used by 1
AbbreviationClosed unit disk in the plane#✓fully proved
The closed unit Euclidean disk \(\{(x, y) \in \mathbb{R} \times \mathbb{R} \mid x^2 + y^2 \le 1\}\), the source of the parametrization of a slicing disk.
The disk and its boundary circle are written out by the equations \(x^2 + y^2 \le 1\) and \(x^2 + y^2 = 1\) rather than as the closed unit ball and unit sphere of \(\mathbb{R} \times \mathbb{R}\). The product carries the sup norm, so that ball would be the square \([-1, 1]^2\) and that sphere its boundary, which has corners. At a corner, no smooth map with injective derivative can match a corner-free smooth knot as its boundary, so slice disks parametrized by the square cannot exist, and every knot would fail to be smoothly slice.
abbrev disk2 : Set (ℝ × ℝ) := {p | p.1 ^ 2 + p.2 ^ 2 ≤ 1}
AbbreviationUnit circle in the plane#✓fully proved
The unit Euclidean circle \(\{(x, y) \in \mathbb{R} \times \mathbb{R} \mid x^2 + y^2 = 1\}\), the source of the boundary of a slicing disk.
abbrev circle1 : Set (ℝ × ℝ) := {p | p.1 ^ 2 + p.2 ^ 2 = 1}
Used by 2
DefinitionClosed upper half-space#✓fully proved
The closed upper half-space in \(\mathbb{R}^3 \times \mathbb{R}\) is the set \(\mathbb{R}^3 \times [0, \infty)\) of points \((x, s)\) with \(s \ge 0\).
We identify \(\mathbb{R}^3 \times [0, \infty)\) with \(B^4 \setminus \{\mathrm{pt}\}\), so slice disks live here.
def upperHalf : Set (R3 × ℝ) := { q | 0 ≤ q.2 }
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
Uses 1 · Used by 1
DefinitionModel interior \(2\)-plane#✓fully proved
The model interior \(2\)-plane in \(\mathbb{R}^3 \times \mathbb{R}\) is the set of points \(((x_1, x_2, x_3), t)\) with \(x_2 = x_3 = 0\), where \(x_1\) and \(t\) are arbitrary. It is the local model for interior local flatness of an embedded \(2\)-disk.
def modelPlane2 : Set (R3 × ℝ) := { q | q.1 1 = 0 ∧ q.1 2 = 0 }
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
Uses 1 · Used by 1
DefinitionModel half-plane#✓fully proved
The model half-plane is the set of pairs \(((p_1, p_2, p_3), s)\) in \(\mathbb{R}^3 \times \mathbb{R}\) with \(p_2 = p_3 = 0\) and \(s \ge 0\). It is a copy of the closed half-plane \(\mathbb{R} \times [0, \infty)\), with coordinates \(p_1\) and \(s\), lying in the upper half-space \(s \ge 0\).
It is the local model for boundary local flatness of a properly embedded disk.
def modelHalfPlane2 : Set (R3 × ℝ) := { q | q.1 1 = 0 ∧ q.1 2 = 0 ∧ 0 ≤ q.2 }
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
Uses 1 · Used by 1
DefinitionSmoothly slice (smooth knot version)#✓fully proved
Let \(\Delta = \{(x, y) \in \mathbb{R}^2 : x^2 + y^2 \le 1\}\) be the closed unit disk and \(C = \{(x, y) \in \mathbb{R}^2 : x^2 + y^2 = 1\}\) its boundary circle. A smooth knot \(K\) is smoothly slice if there is a smooth (\(C^\infty\)) map \(f : \mathbb{R}^2 \to \mathbb{R}^3 \times \mathbb{R}\) such that \(f\) is injective on \(\Delta\); for every \(p \in \Delta\) the last coordinate of \(f(p)\) is nonnegative, and it is \(0\) exactly when \(p \in C\); the derivative of \(f\) at every point of \(\Delta\) is injective; and the image of \(C\) under the \(\mathbb{R}^3\)-component of \(f\) is the image of \(K\).
def Knot.SmoothlySlice (K : Knot) : Prop :=
∃ D : ℝ × ℝ → R3 × ℝ,
ContDiff ℝ (⊤ : ℕ∞) D ∧
Set.InjOn D disk2 ∧
(∀ p ∈ disk2, 0 ≤ (D p).2) ∧
(∀ p ∈ disk2, (D p).2 = 0 ↔ p ∈ circle1) ∧
(∀ p ∈ disk2, Function.Injective (fderiv ℝ D p)) ∧
(fun p => (D p).1) '' circle1 = Set.range K.curve
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
abbrev disk2 : Set (ℝ × ℝ) := {p | p.1 ^ 2 + p.2 ^ 2 ≤ 1}
WantedExt/Topology/ConwayKnotShared.lean:231
abbrev circle1 : Set (ℝ × ℝ) := {p | p.1 ^ 2 + p.2 ^ 2 = 1}
WantedExt/Topology/ConwayKnotShared.lean:235
Uses 4 · Used by 1
DefinitionLocal flatness at an interior point#✓fully proved
Let \(q \in \mathbb{R}^3 \times \mathbb{R}\) and \(D : \mathbb{R}^2 \to \mathbb{R}^3 \times \mathbb{R}\). Write \(\Delta = \{(x, y) : x^2 + y^2 \le 1\}\) for the closed unit disk and \(P = \{((p_1, p_2, p_3), s) : p_2 = p_3 = 0\}\) for the model plane. The image \(D(\Delta)\) is locally flat at \(q\) in the interior sense if there is a homeomorphism \(h : U \to V\) between open subsets \(U\), \(V\) of \(\mathbb{R}^3 \times \mathbb{R}\) such that \(q \in U\) and \(h(U \cap D(\Delta)) = V \cap P\).
def IsLocallyFlatInterior (D : ℝ × ℝ → R3 × ℝ) (q : R3 × ℝ) : Prop :=
∃ h : OpenPartialHomeomorph (R3 × ℝ) (R3 × ℝ),
q ∈ h.source ∧
h.toFun '' (h.source ∩ D '' disk2) = h.target ∩ modelPlane2
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
abbrev disk2 : Set (ℝ × ℝ) := {p | p.1 ^ 2 + p.2 ^ 2 ≤ 1}
WantedExt/Topology/ConwayKnotShared.lean:231
def modelPlane2 : Set (R3 × ℝ) := { q | q.1 1 = 0 ∧ q.1 2 = 0 }
WantedExt/Topology/ConwayKnotShared.lean:244
Uses 3 · Used by 1
DefinitionLocal flatness at a boundary point#✓fully proved
Let \(q \in \mathbb{R}^3 \times \mathbb{R}\) and \(D : \mathbb{R}^2 \to \mathbb{R}^3 \times \mathbb{R}\). Write \(\Delta = \{(x, y) : x^2 + y^2 \le 1\}\) for the closed unit disk, \(H = \{(p, s) : s \ge 0\}\) for the closed upper half-space, and \(P = \{((p_1, p_2, p_3), s) : p_2 = p_3 = 0,\ s \ge 0\}\) for the model half-plane. The image \(D(\Delta)\) is locally flat at \(q\) in the boundary sense if there is a homeomorphism \(h : U \to V\) between open subsets \(U\), \(V\) of \(\mathbb{R}^3 \times \mathbb{R}\) such that \(q \in U\), \(h(U \cap H) = V \cap H\) and \(h(U \cap D(\Delta)) = V \cap P\).
The chart is open in \(\mathbb{R}^3 \times \mathbb{R}\) rather than in \(H\): when the last coordinate of \(q\) is \(0\), every open neighbourhood of \(q\) leaves \(H\).
def IsLocallyFlatBoundary (D : ℝ × ℝ → R3 × ℝ) (q : R3 × ℝ) : Prop :=
∃ h : OpenPartialHomeomorph (R3 × ℝ) (R3 × ℝ),
q ∈ h.source ∧
h.toFun '' (h.source ∩ upperHalf) = h.target ∩ upperHalf ∧
h.toFun '' (h.source ∩ D '' disk2) = h.target ∩ modelHalfPlane2
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
def upperHalf : Set (R3 × ℝ) := { q | 0 ≤ q.2 }
WantedExt/Topology/ConwayKnotShared.lean:239
abbrev disk2 : Set (ℝ × ℝ) := {p | p.1 ^ 2 + p.2 ^ 2 ≤ 1}
WantedExt/Topology/ConwayKnotShared.lean:231
def modelHalfPlane2 : Set (R3 × ℝ) := { q | q.1 1 = 0 ∧ q.1 2 = 0 ∧ 0 ≤ q.2 }
WantedExt/Topology/ConwayKnotShared.lean:250
Uses 4 · Used by 1
DefinitionTopologically slice (smooth knot version)#✓fully proved
Write points of \(\mathbb{R}^3 \times \mathbb{R}\) as \((x, s)\) with \(x = (x_1, x_2, x_3)\). Let \(H = \{(x, s) : s \ge 0\}\) be the closed upper half-space, \(P = \{(x, s) : x_2 = x_3 = 0\}\) the model plane and \(P_+ = P \cap H\) the model half-plane, and let \(D^2 = \{(a, b) \in \mathbb{R}^2 : a^2 + b^2 \le 1\}\) and \(S^1 = \{(a, b) \in \mathbb{R}^2 : a^2 + b^2 = 1\}\). A smooth knot \(K\) is topologically slice if there is a continuous map \(D : \mathbb{R}^2 \to \mathbb{R}^3 \times \mathbb{R}\), injective on \(D^2\), such that: for every \(p \in D^2\) the last coordinate of \(D(p)\) is nonnegative, and it is \(0\) exactly when \(p \in S^1\); for every \(p \in D^2 \setminus S^1\) there is a homeomorphism \(h : U \to V\) between open subsets of \(\mathbb{R}^3 \times \mathbb{R}\) with \(D(p) \in U\) and \(h(U \cap D(D^2)) = V \cap P\); for every \(p \in S^1\) there is such a homeomorphism with \(D(p) \in U\), \(h(U \cap H) = V \cap H\) and \(h(U \cap D(D^2)) = V \cap P_+\); and the image of \(S^1\) under the \(\mathbb{R}^3\)-component of \(D\) is the image of \(K\).
def Knot.TopologicallySlice (K : Knot) : Prop :=
∃ D : ℝ × ℝ → R3 × ℝ,
Continuous D ∧
Set.InjOn D disk2 ∧
(∀ p ∈ disk2, 0 ≤ (D p).2) ∧
(∀ p ∈ disk2, (D p).2 = 0 ↔ p ∈ circle1) ∧
(∀ p ∈ disk2 \ circle1, IsLocallyFlatInterior D (D p)) ∧
(∀ p ∈ circle1, IsLocallyFlatBoundary D (D p)) ∧
(fun p => (D p).1) '' circle1 = Set.range K.curve
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
abbrev disk2 : Set (ℝ × ℝ) := {p | p.1 ^ 2 + p.2 ^ 2 ≤ 1}
WantedExt/Topology/ConwayKnotShared.lean:231
abbrev circle1 : Set (ℝ × ℝ) := {p | p.1 ^ 2 + p.2 ^ 2 = 1}
WantedExt/Topology/ConwayKnotShared.lean:235
def IsLocallyFlatInterior (D : ℝ × ℝ → R3 × ℝ) (q : R3 × ℝ) : Prop :=
∃ h : OpenPartialHomeomorph (R3 × ℝ) (R3 × ℝ),
q ∈ h.source ∧
h.toFun '' (h.source ∩ D '' disk2) = h.target ∩ modelPlane2
WantedExt/Topology/ConwayKnotShared.lean:283
def IsLocallyFlatBoundary (D : ℝ × ℝ → R3 × ℝ) (q : R3 × ℝ) : Prop :=
∃ h : OpenPartialHomeomorph (R3 × ℝ) (R3 × ℝ),
q ∈ h.source ∧
h.toFun '' (h.source ∩ upperHalf) = h.target ∩ upperHalf ∧
h.toFun '' (h.source ∩ D '' disk2) = h.target ∩ modelHalfPlane2
WantedExt/Topology/ConwayKnotShared.lean:293
Uses 6 · Used by 1
DefinitionParametrization of a closed polyline#✓fully proved
Let \(v_0, \dots, v_{n-1}\) be a list of \(n \ge 1\) points of \(\mathbb{R}^3\). The polyline curve is the \(n\)-periodic map \(\gamma : \mathbb{R} \to \mathbb{R}^3\) with \(\gamma(k + \alpha) = (1 - \alpha) v_k + \alpha v_{k+1}\) for integers \(0 \le k < n\) and reals \(0 \le \alpha < 1\), where indices are taken modulo \(n\) (so \(v_n = v_0\)). For the empty list the curve is constantly \(0\).
noncomputable def plCurve (vertices : List R3) (t : ℝ) : R3 :=
if h : vertices.length = 0 then 0
else
let n : ℕ := vertices.length
let s : ℝ := t - (n : ℝ) * Int.floor (t / (n : ℝ))
let k : ℕ := (Int.floor s).toNat
let α : ℝ := s - k
(1 - α) • vertices[k % n]'(Nat.mod_lt _ (Nat.pos_of_ne_zero h)) +
α • vertices[(k + 1) % n]'(Nat.mod_lt _ (Nat.pos_of_ne_zero h))
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
Uses 1 · Used by 2
StructurePL knot (closed polyline)#✓fully proved
A PL knot is a list \(v_0, \dots, v_{n-1}\) of points of \(\mathbb{R}^3\) with \(n \ge 3\), viewed as the vertices, in order, of the closed polyline with edges from \(v_i\) to \(v_{i+1}\) for \(i < n - 1\) and from \(v_{n-1}\) back to \(v_0\).
Simplicity of the polyline (that it is an embedded closed curve) is not part of the data; it is imposed as a separate condition.
structure PLKnot where
/-- The ordered list of polyline vertices. -/
vertices : List R3
/-- A closed polyline needs at least three vertices to be non-degenerate. -/
three_le : 3 ≤ vertices.length
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
vertices : List R3
WantedExt/Topology/ConwayKnotShared.lean:338
Uses 1 · Used by 7
DefinitionImage of a PL knot#✓fully proved
Let \(K\) be a PL knot with vertices \(v_0, \dots, v_{n-1}\). Its image is the subset of \(\mathbb{R}^3\) traced by the closed polyline through these vertices: the image of the half-open interval \([0, n)\) under the parametrization that sends \(k + \alpha\), for an integer \(0 \le k < n\) and a real \(0 \le \alpha < 1\), to \((1 - \alpha) v_k + \alpha v_{k+1}\), with indices taken modulo \(n\).
def PLKnot.image (K : PLKnot) : Set R3 :=
plCurve K.vertices '' Set.Ico (0 : ℝ) (K.vertices.length : ℝ)
structure PLKnot where
/-- The ordered list of polyline vertices. -/
vertices : List R3
/-- A closed polyline needs at least three vertices to be non-degenerate. -/
three_le : 3 ≤ vertices.length
WantedExt/Topology/ConwayKnotShared.lean:336
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
noncomputable def plCurve (vertices : List R3) (t : ℝ) : R3 :=
if h : vertices.length = 0 then 0
else
let n : ℕ := vertices.length
let s : ℝ := t - (n : ℝ) * Int.floor (t / (n : ℝ))
let k : ℕ := (Int.floor s).toNat
let α : ℝ := s - k
(1 - α) • vertices[k % n]'(Nat.mod_lt _ (Nat.pos_of_ne_zero h)) +
α • vertices[(k + 1) % n]'(Nat.mod_lt _ (Nat.pos_of_ne_zero h))
WantedExt/Topology/ConwayKnotShared.lean:318
Uses 3 · Used by 1
DefinitionSimple PL knot#✓fully proved
A PL knot \(K\) with vertices \(v_0, \dots, v_{n-1}\) is simple if its closed polyline parametrization, which sends \(k + \alpha\), for an integer \(0 \le k < n\) and a real \(0 \le \alpha < 1\), to \((1 - \alpha) v_k + \alpha v_{k+1}\) (indices modulo \(n\)), is injective on the half-open interval \([0, n)\).
Equivalently, the polyline is a simple closed curve: all vertices are distinct, non-adjacent edges are disjoint, and adjacent edges meet only at their shared vertex.
def PLKnot.IsSimple (K : PLKnot) : Prop :=
∀ s t : ℝ,
s ∈ Set.Ico (0 : ℝ) (K.vertices.length : ℝ) →
t ∈ Set.Ico (0 : ℝ) (K.vertices.length : ℝ) →
plCurve K.vertices s = plCurve K.vertices t →
s = t
structure PLKnot where
/-- The ordered list of polyline vertices. -/
vertices : List R3
/-- A closed polyline needs at least three vertices to be non-degenerate. -/
three_le : 3 ≤ vertices.length
WantedExt/Topology/ConwayKnotShared.lean:336
noncomputable def plCurve (vertices : List R3) (t : ℝ) : R3 :=
if h : vertices.length = 0 then 0
else
let n : ℕ := vertices.length
let s : ℝ := t - (n : ℝ) * Int.floor (t / (n : ℝ))
let k : ℕ := (Int.floor s).toNat
let α : ℝ := s - k
(1 - α) • vertices[k % n]'(Nat.mod_lt _ (Nat.pos_of_ne_zero h)) +
α • vertices[(k + 1) % n]'(Nat.mod_lt _ (Nat.pos_of_ne_zero h))
WantedExt/Topology/ConwayKnotShared.lean:318
Uses 3 · Used by 1
DefinitionSmooth representative of a PL knot#✓fully proved
A smooth knot \(J\) is a smooth representative of the piecewise-linear knot \(K\) if the image of \(J\) and the image of \(K\) are unoriented topologically ambient isotopic in \(\mathbb{R}^3\): some topological ambient isotopy \((H_t)\) of \(\mathbb{R}^3\) satisfies \(H_1(\operatorname{im} J) = \operatorname{im} K\).
When the polyline \(K\) is simple, both curves are tame, and this agrees with the usual relation of having the same smooth/PL knot type.
def PLKnot.HasSmoothRepresentative (K : PLKnot) (J : Knot) : Prop :=
Set.UnorientedTopAmbIsotopic (Set.range J.curve) K.image
structure PLKnot where
/-- The ordered list of polyline vertices. -/
vertices : List R3
/-- A closed polyline needs at least three vertices to be non-degenerate. -/
three_le : 3 ≤ vertices.length
WantedExt/Topology/ConwayKnotShared.lean:336
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
def Set.UnorientedTopAmbIsotopic (A B : Set R3) : Prop :=
∃ Φ : TopAmbientIsotopy, Φ.H 1 '' A = B
WantedExt/Topology/ConwayKnotShared.lean:215
Uses 5 · Used by 2
DefinitionSmoothly slice (PL knot version)#✓fully proved
A PL knot \(K\) is smoothly slice if there is a smooth knot \(J\) that is smoothly slice and is a smooth representative of \(K\): for some topological ambient isotopy \((H_t)\) of \(\mathbb{R}^3\), the map \(H_1\) carries the image of \(J\) onto the image (trace) of the polyline \(K\).
Piccirillo's theorem that the Conway knot is not smoothly slice is stated with this notion.
def PLKnot.SmoothlySlice (K : PLKnot) : Prop :=
∃ J : Knot, K.HasSmoothRepresentative J ∧ J.SmoothlySlice
structure PLKnot where
/-- The ordered list of polyline vertices. -/
vertices : List R3
/-- A closed polyline needs at least three vertices to be non-degenerate. -/
three_le : 3 ≤ vertices.length
WantedExt/Topology/ConwayKnotShared.lean:336
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
DefinitionTopologically slice (PL knot version)#✓fully proved
A PL knot \(K\) is topologically slice if there is a smooth knot \(J\) that is a smooth representative of \(K\), meaning that the image of \(J\) and the image of \(K\) are unoriented topologically ambient isotopic subsets of \(\mathbb{R}^3\), and such that \(J\) is topologically slice as a smooth knot.
def PLKnot.TopologicallySlice (K : PLKnot) : Prop :=
∃ J : Knot, K.HasSmoothRepresentative J ∧ J.TopologicallySlice
structure PLKnot where
/-- The ordered list of polyline vertices. -/
vertices : List R3
/-- A closed polyline needs at least three vertices to be non-degenerate. -/
three_le : 3 ≤ vertices.length
WantedExt/Topology/ConwayKnotShared.lean:336
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
Uses 4 · Used by 2
DefinitionPoint from three coordinates#✓fully proved
For real numbers \(x\), \(y\), \(z\), this is the point \((x, y, z)\) of the Euclidean space \(\mathbb{R}^3\).
noncomputable def mkR3 (x y z : ℝ) : R3 :=
WithLp.toLp 2 (fun i : Fin 3 =>
if i.val = 0 then x else if i.val = 1 then y else z)
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
Uses 1 · Used by 3
StructureBraid closure traversal state#✓fully proved
A traversal state for tracing the closure of a braid consists of the current strand position, a natural number, and the list of points of \(\mathbb{R}^3\) accumulated so far, in order, as vertices of the polyline.
structure State where
/-- Current strand `x`-position. -/
pos : ℕ
/-- Polyline vertices accumulated so far, in order. -/
vertices : List R3
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
Uses 1 · Used by 5
DefinitionTracing a strand through one crossing#✓fully proved
Let a traversal state consist of a current strand position \(p \in \mathbb{N}\) and a list of vertices in \(\mathbb{R}^3\), let \(w \in \mathbb{Z}\) be a braid generator with \(i = |w|\), and let \(z_{\mathrm{top}}, z_{\mathrm{bot}} \in \mathbb{R}\). Put \(z_{\mathrm{hi}} = z_{\mathrm{top}} - (z_{\mathrm{top}} - z_{\mathrm{bot}})/4\) and \(z_{\mathrm{lo}} = z_{\mathrm{bot}} + (z_{\mathrm{top}} - z_{\mathrm{bot}})/4\). The new state is obtained by changing the position and appending the listed points, in order, to the vertex list. If \(p = i\) and \(w > 0\), the new position is \(i + 1\) and the points are \((i, 1, z_{\mathrm{hi}})\), \((i + 1, 1, z_{\mathrm{lo}})\), \((i + 1, 0, z_{\mathrm{bot}})\). If \(p = i\) and \(w \le 0\), the new position is \(i + 1\) and the only point is \((i + 1, 0, z_{\mathrm{bot}})\). If \(p = i + 1\) and \(w > 0\), the new position is \(i\) and the only point is \((i, 0, z_{\mathrm{bot}})\). If \(p = i + 1\) and \(w \le 0\), the new position is \(i\) and the points are \((i + 1, 1, z_{\mathrm{hi}})\), \((i, 1, z_{\mathrm{lo}})\), \((i, 0, z_{\mathrm{bot}})\). Otherwise the position stays \(p\) and the only point is \((p, 0, z_{\mathrm{bot}})\).
The step is meant for \(z_{\mathrm{bot}} < z_{\mathrm{top}}\), with the crossing in the slab between these heights: the strand passing over is lifted to \(y = 1\), and the strand passing under stays at \(y = 0\).
MathlibExt.Topology.ConwayKnotShared.KnotTheory.BraidClosure.applyCrossing · 34 lines
noncomputable def applyCrossing (state : State) (w : ℤ) (zTop zBot : ℝ) : State :=
let i : ℕ := w.natAbs
let p : ℕ := state.pos
let zMidHi : ℝ := zTop - (zTop - zBot) / 4
let zMidLo : ℝ := zBot + (zTop - zBot) / 4
if p = i then
-- We are at the lower-index strand of the crossing; we swap to position `i + 1`.
if 0 < w then
-- σ_i: lower strand goes OVER. Lift to `y = 1`, swap, drop.
{ pos := i + 1
vertices := state.vertices ++
[ mkR3 (i : ℝ) 1 zMidHi,
mkR3 ((i + 1 : ℕ) : ℝ) 1 zMidLo,
mkR3 ((i + 1 : ℕ) : ℝ) 0 zBot ] }
else
-- σ_i⁻¹: lower strand goes UNDER. Stay at `y = 0`, swap.
{ pos := i + 1
vertices := state.vertices ++ [ mkR3 ((i + 1 : ℕ) : ℝ) 0 zBot ] }
else if p = i + 1 then
-- We are at the upper-index strand of the crossing; we swap to position `i`.
if 0 < w then
-- σ_i: we are the UNDER strand.
{ pos := i
vertices := state.vertices ++ [ mkR3 (i : ℝ) 0 zBot ] }
else
-- σ_i⁻¹: we are the OVER strand.
{ pos := i
vertices := state.vertices ++
[ mkR3 ((i + 1 : ℕ) : ℝ) 1 zMidHi,
mkR3 (i : ℝ) 1 zMidLo,
mkR3 (i : ℝ) 0 zBot ] }
else
-- Not participating in this crossing; descend straight.
{ state with vertices := state.vertices ++ [ mkR3 (p : ℝ) 0 zBot ] }
structure State where
/-- Current strand `x`-position. -/
pos : ℕ
/-- Polyline vertices accumulated so far, in order. -/
vertices : List R3
WantedExt/Topology/ConwayKnotShared.lean:423
noncomputable def mkR3 (x y z : ℝ) : R3 :=
WithLp.toLp 2 (fun i : Fin 3 =>
if i.val = 0 then x else if i.val = 1 then y else z)
WantedExt/Topology/ConwayKnotShared.lean:417
Uses 3 · Used by 1
DefinitionTracing a strand through a braid word#✓fully proved
Given a traversal state \(s\), a braid word \(w_0 w_1 \cdots w_{m-1}\) (a list of integers) and a starting index \(k \in \mathbb{N}\), the one-crossing step is applied to the state for each generator in turn, starting from \(s\): the generator \(w_j\) is applied with top height \(-(k + j)\) and bottom height \(-(k + j + 1)\). The result is the final state; for the empty word it is \(s\).
noncomputable def applyWord : State → List ℤ → ℕ → State
| state, [], _ => state
| state, w :: ws, k =>
let state' := applyCrossing state w (-(k : ℝ)) (-((k : ℝ) + 1))
applyWord state' ws (k + 1)
structure State where
/-- Current strand `x`-position. -/
pos : ℕ
/-- Polyline vertices accumulated so far, in order. -/
vertices : List R3
WantedExt/Topology/ConwayKnotShared.lean:423
noncomputable def applyCrossing (state : State) (w : ℤ) (zTop zBot : ℝ) : State :=
let i : ℕ := w.natAbs
let p : ℕ := state.pos
let zMidHi : ℝ := zTop - (zTop - zBot) / 4
let zMidLo : ℝ := zBot + (zTop - zBot) / 4
if p = i then
-- We are at the lower-index strand of the crossing; we swap to position `i + 1`.
if 0 < w then
-- σ_i: lower strand goes OVER. Lift to `y = 1`, swap, drop.
{ pos := i + 1
vertices := state.vertices ++
[ mkR3 (i : ℝ) 1 zMidHi,
⋯
WantedExt/Topology/ConwayKnotShared.lean:433
Uses 2 · Used by 1
DefinitionOne pass of the braid closure#✓fully proved
Let \(w\) be a braid word (a list of integers) of length \(m\). Starting from a traversal state, one pass applies the letters of \(w\) in order as crossings, the \(k\)-th letter (counting from \(0\)) occupying the slab \(-(k+1) \le z \le -k\); this moves the state to a strand position \(p\) and appends the crossing vertices. It then appends the closure arc: the vertices \((p, 100, -m)\) and \((p, 100, 0)\), followed by \((p, 0, 0)\) unless \(p = 1\). The resulting state has position \(p\) and the extended vertex list.
When \(p = 1\) the vertex \((1, 0, 0)\) is left out because the polyline starts there, so the closure arc already returns to its first vertex.
noncomputable def onePass (word : List ℤ) (state : State) : State :=
let afterBraid := applyWord state word 0
let m : ℝ := word.length
let p : ℕ := afterBraid.pos
let arc :=
if p = 1 then
[ mkR3 (p : ℝ) 100 (-m), mkR3 (p : ℝ) 100 0 ]
else
[ mkR3 (p : ℝ) 100 (-m), mkR3 (p : ℝ) 100 0, mkR3 (p : ℝ) 0 0 ]
{ pos := p, vertices := afterBraid.vertices ++ arc }
structure State where
/-- Current strand `x`-position. -/
pos : ℕ
/-- Polyline vertices accumulated so far, in order. -/
vertices : List R3
WantedExt/Topology/ConwayKnotShared.lean:423
noncomputable def applyWord : State → List ℤ → ℕ → State
| state, [], _ => state
| state, w :: ws, k =>
let state' := applyCrossing state w (-(k : ℝ)) (-((k : ℝ) + 1))
applyWord state' ws (k + 1)
WantedExt/Topology/ConwayKnotShared.lean:470
noncomputable def mkR3 (x y z : ℝ) : R3 :=
WithLp.toLp 2 (fun i : Fin 3 =>
if i.val = 0 then x else if i.val = 1 then y else z)
WantedExt/Topology/ConwayKnotShared.lean:417
Uses 4 · Used by 1
DefinitionIterated braid-closure passes#✓fully proved
For a braid word \(w\), a number \(f\) of remaining passes and a traversal state \(S\), the iteration returns \(S\) when \(f = 0\). When \(f > 0\) it applies one pass of \(w\) to \(S\), obtaining a state \(S'\); it returns \(S'\) if the strand position of \(S'\) is \(1\), and otherwise iterates on \(S'\) with \(f - 1\) passes remaining.
The bound \(f\) guarantees termination. The braid closure on \(n\) strands uses \(f = n\), since at most \(n\) distinct strand positions are visited.
noncomputable def iterate (word : List ℤ) : ℕ → State → State
| 0, state => state
| f + 1, state =>
let s' := onePass word state
if s'.pos = 1 then s' else iterate word f s'
structure State where
/-- Current strand `x`-position. -/
pos : ℕ
/-- Polyline vertices accumulated so far, in order. -/
vertices : List R3
WantedExt/Topology/ConwayKnotShared.lean:423
noncomputable def onePass (word : List ℤ) (state : State) : State :=
let afterBraid := applyWord state word 0
let m : ℝ := word.length
let p : ℕ := afterBraid.pos
let arc :=
if p = 1 then
[ mkR3 (p : ℝ) 100 (-m), mkR3 (p : ℝ) 100 0 ]
else
[ mkR3 (p : ℝ) 100 (-m), mkR3 (p : ℝ) 100 0, mkR3 (p : ℝ) 0 0 ]
{ pos := p, vertices := afterBraid.vertices ++ arc }
WantedExt/Topology/ConwayKnotShared.lean:480
Uses 2 · Used by 1
DefinitionPolyline closure of a braid word#✓fully proved
Let \(n \in \mathbb{N}\), and let \(w = w_0 w_1 \cdots w_{m-1}\) be a braid word (a list of integers, where \(i > 0\) stands for \(\sigma_i\) and \(-i\) for \(\sigma_i^{-1}\)). If \(m = 0\), the value is the junk list \((0, 0, 0)\), \((1, 0, 0)\), \((0, 1, 0)\). Otherwise the value is a list of vertices in \(\mathbb{R}^3\) tracing the closure of \(w\) as one polyline component. It starts at the vertex \((1, 0, 0)\) on strand position \(1\) and makes passes through the braid: in each pass the crossing \(w_j\) occupies the slab between heights \(z = -(j + 1)\) and \(z = -j\), with the strand passing over lifted to \(y = 1\), and each pass is followed by a closure arc through \(y = 100\) back up to height \(z = 0\). Tracing stops as soon as a pass ends at position \(1\), or after \(n\) passes.
The layout is designed for words with \(1 \le |w_j| \le n - 1\) for every \(j\), where the strands sit at the \(x\)-positions \(1, \dots, n\); other words still yield a vertex list, but not a meaningful one.
noncomputable def braidClosure (n : ℕ) (word : List ℤ) : List R3 :=
if word.length = 0 then
-- Junk fallback for the empty-word case (no PL data to derive).
[BraidClosure.mkR3 0 0 0, BraidClosure.mkR3 1 0 0, BraidClosure.mkR3 0 1 0]
else
let init : BraidClosure.State :=
{ pos := 1, vertices := [BraidClosure.mkR3 1 0 0] }
(BraidClosure.iterate word n init).vertices
abbrev R3 : Type := EuclideanSpace ℝ (Fin 3)
WantedExt/Topology/ConwayKnotShared.lean:74
noncomputable def mkR3 (x y z : ℝ) : R3 :=
WithLp.toLp 2 (fun i : Fin 3 =>
if i.val = 0 then x else if i.val = 1 then y else z)
WantedExt/Topology/ConwayKnotShared.lean:417
structure State where
/-- Current strand `x`-position. -/
pos : ℕ
/-- Polyline vertices accumulated so far, in order. -/
vertices : List R3
WantedExt/Topology/ConwayKnotShared.lean:423
noncomputable def iterate (word : List ℤ) : ℕ → State → State
| 0, state => state
| f + 1, state =>
let s' := onePass word state
if s'.pos = 1 then s' else iterate word f s'
WantedExt/Topology/ConwayKnotShared.lean:493
Uses 4 · Used by 1
DefinitionBraid word for the Conway knot#✓fully proved
The braid word \(\sigma_1^{-2} \sigma_2 \sigma_1^{-1} \sigma_2 \sigma_1^{-1} \sigma_3 \sigma_2^{-2} \sigma_3^{2}\) on \(4\) strands, encoded as the list of integers \([-1, -1, 2, -1, 2, -1, 3, -2, -2, 3, 3]\), where an entry \(i > 0\) stands for the generator \(\sigma_i\) and \(-i\) for \(\sigma_i^{-1}\). It has length \(11\) and writhe \(-1\), and is a braid word for the Conway knot 11n34.
def conwayBraidWord : List ℤ := [-1, -1, 2, -1, 2, -1, 3, -2, -2, 3, 3]
Sources
- KnotInfo's
11n_34record,braid_notationfield. The Knot Atlas records a different but Markov-equivalent presentation for the same knot,[1, 1, 2, -3, 2, 1, -3, -2, -2, -3, -3](which it labelsK11n34, the mirror of the Conway knot); both representations agree on braid index 4, braid length 11, and writhe-1. Sliceness is mirror-invariant, so either braid word is a valid witness forconway_knot_not_smoothly_slice.
Used by 1
DefinitionThe Conway knot#✓fully proved
The Conway knot 11n34 as a piecewise-linear closed polyline in \(\mathbb{R}^3\): its vertices are those of the polyline closure, on \(4\) strands, of the braid word \(\sigma_1^{-2} \sigma_2 \sigma_1^{-1} \sigma_2 \sigma_1^{-1} \sigma_3 \sigma_2^{-2} \sigma_3^{2}\) for the Conway knot.
noncomputable def conwayKnot : PLKnot where
vertices := braidClosure 4 conwayBraidWord
three_le := by
have h : (braidClosure 4 conwayBraidWord).length = 78 := by rfl
omega
structure PLKnot where
/-- The ordered list of polyline vertices. -/
vertices : List R3
/-- A closed polyline needs at least three vertices to be non-degenerate. -/
three_le : 3 ≤ vertices.length
WantedExt/Topology/ConwayKnotShared.lean:336
noncomputable def braidClosure (n : ℕ) (word : List ℤ) : List R3 :=
if word.length = 0 then
-- Junk fallback for the empty-word case (no PL data to derive).
[BraidClosure.mkR3 0 0 0, BraidClosure.mkR3 1 0 0, BraidClosure.mkR3 0 1 0]
else
let init : BraidClosure.State :=
{ pos := 1, vertices := [BraidClosure.mkR3 1 0 0] }
(BraidClosure.iterate word n init).vertices
WantedExt/Topology/ConwayKnotShared.lean:503
def conwayBraidWord : List ℤ := [-1, -1, 2, -1, 2, -1, 3, -2, -2, 3, 3]
WantedExt/Topology/ConwayKnotShared.lean:543
Uses 4 · Used by 3
DefinitionKnots as parametrized knots#✓fully proved
A knot in \(\mathbb{R}^3\), given by a smooth \(2\pi\)-periodic immersion \(\gamma : \mathbb{R} \to \mathbb{R}^3\) that is injective on \([0, 2\pi)\), is sent to the parametrized knot with the same parametrization \(\gamma\).
def toParametrizedKnot (K : ConwayKnotShared.KnotTheory.Knot) :
Knot.Euclidean.ParametrizedKnot where
curve := K.curve
smooth := K.smooth
periodic := K.periodic
injOn := K.injOn
immersion := K.immersion
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
structure ParametrizedKnot where
curve : ℝ → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
immersion : ∀ t, deriv curve t ≠ 0
MathlibExt/Topology/Knot/EuclideanLink.lean:58
Uses 4 · Used by 3
DefinitionParametrized knots as knots#✓fully proved
A parametrized knot in \(\mathbb{R}^3\), given by a smooth \(2\pi\)-periodic immersion \(\gamma : \mathbb{R} \to \mathbb{R}^3\) that is injective on \([0, 2\pi)\), is sent to the knot with the same parametrization \(\gamma\).
def ofParametrizedKnot (K : Knot.Euclidean.ParametrizedKnot) :
ConwayKnotShared.KnotTheory.Knot where
curve := K.curve
smooth := K.smooth
periodic := K.periodic
injOn := K.injOn
immersion := K.immersion
structure ParametrizedKnot where
curve : ℝ → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
immersion : ∀ t, deriv curve t ≠ 0
MathlibExt/Topology/Knot/EuclideanLink.lean:58
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
Uses 4 · Used by 2
DefinitionKnots are the same as parametrized knots#✓fully proved
Sending a knot in \(\mathbb{R}^3\) to the parametrized knot with the same parametrization is a bijection from knots to parametrized knots, whose inverse sends a parametrized knot to the knot with the same parametrization.
def knotEquiv :
ConwayKnotShared.KnotTheory.Knot ≃ Knot.Euclidean.ParametrizedKnot where
toFun := toParametrizedKnot
invFun := ofParametrizedKnot
left_inv := ofParametrizedKnot_toParametrizedKnot
right_inv := toParametrizedKnot_ofParametrizedKnot
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
structure ParametrizedKnot where
curve : ℝ → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
immersion : ∀ t, deriv curve t ≠ 0
MathlibExt/Topology/Knot/EuclideanLink.lean:58
def toParametrizedKnot (K : ConwayKnotShared.KnotTheory.Knot) :
Knot.Euclidean.ParametrizedKnot where
curve := K.curve
smooth := K.smooth
periodic := K.periodic
injOn := K.injOn
immersion := K.immersion
WantedExt/Topology/ConwayKnotEuclideanBridge.lean:43
def ofParametrizedKnot (K : Knot.Euclidean.ParametrizedKnot) :
ConwayKnotShared.KnotTheory.Knot where
curve := K.curve
smooth := K.smooth
periodic := K.periodic
injOn := K.injOn
immersion := K.immersion
WantedExt/Topology/ConwayKnotEuclideanBridge.lean:52
@[simp]
theorem ofParametrizedKnot_toParametrizedKnot
(K : ConwayKnotShared.KnotTheory.Knot) :
ofParametrizedKnot (toParametrizedKnot K) = K
WantedExt/Topology/ConwayKnotEuclideanBridge.lean:61
@[simp]
theorem toParametrizedKnot_ofParametrizedKnot
(K : Knot.Euclidean.ParametrizedKnot) :
toParametrizedKnot (ofParametrizedKnot K) = K
WantedExt/Topology/ConwayKnotEuclideanBridge.lean:68
Uses 6
DefinitionConway-knot ambient isotopies as Euclidean ambient isotopies#✓fully proved
An ambient isotopy of \(\mathbb{R}^3\) in the sense of the Conway knot statements, given by maps \(H_t : \mathbb{R}^3 \to \mathbb{R}^3\) for \(t \in \mathbb{R}\) with \((t, x) \mapsto H_t(x)\) smooth and \(H_0 = \mathrm{id}\), and maps \(G_t : \mathbb{R}^3 \to \mathbb{R}^3\) with \((t, x) \mapsto G_t(x)\) smooth and \(G_t \circ H_t = H_t \circ G_t = \mathrm{id}\) for every \(t\), is sent to the smooth ambient isotopy of Euclidean 3-space, in the sense of parametrized links, with the same forward family \(H\) and inverse family \(G\).
def toEuclideanAmbientIsotopy
(Φ : ConwayKnotShared.KnotTheory.AmbientIsotopy) :
Knot.Euclidean.AmbientIsotopy where
H := Φ.H
Hinv := Φ.Hinv
smooth := Φ.smooth
smooth_inv := Φ.smooth_inv
inv_left := Φ.inv_left
inv_right := Φ.inv_right
start := Φ.start
structure AmbientIsotopy where
/-- The forward family. -/
H : ℝ → R3 → R3
/-- The inverse family. -/
Hinv : ℝ → R3 → R3
/-- The forward family is jointly smooth in `(t, x)`. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
/-- The inverse family is jointly smooth in `(t, x)`. -/
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
/-- `Hinv t` is a left inverse of `H t`. -/
inv_left : ∀ t x, Hinv t (H t x) = x
/-- `Hinv t` is a right inverse of `H t`. -/
⋯
WantedExt/Topology/ConwayKnotShared.lean:103
structure AmbientIsotopy where
H : ℝ → R3 → R3
Hinv : ℝ → R3 → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
inv_left : ∀ t x, Hinv t (H t x) = x
inv_right : ∀ t x, H t (Hinv t x) = x
start : H 0 = id
MathlibExt/Topology/Knot/EuclideanLink.lean:74
Uses 4 · Used by 2
DefinitionEuclidean ambient isotopies as Conway-knot ambient isotopies#✓fully proved
A smooth ambient isotopy of Euclidean 3-space in the sense of parametrized links, given by maps \(H_t : \mathbb{R}^3 \to \mathbb{R}^3\) for \(t \in \mathbb{R}\) with \((t, x) \mapsto H_t(x)\) smooth and \(H_0 = \mathrm{id}\), and maps \(G_t : \mathbb{R}^3 \to \mathbb{R}^3\) with \((t, x) \mapsto G_t(x)\) smooth and \(G_t \circ H_t = H_t \circ G_t = \mathrm{id}\) for every \(t\), is sent to the ambient isotopy of \(\mathbb{R}^3\) in the sense of the Conway knot statements with the same forward family \(H\) and inverse family \(G\).
def ofEuclideanAmbientIsotopy (Φ : Knot.Euclidean.AmbientIsotopy) :
ConwayKnotShared.KnotTheory.AmbientIsotopy where
H := Φ.H
Hinv := Φ.Hinv
smooth := Φ.smooth
smooth_inv := Φ.smooth_inv
inv_left := Φ.inv_left
inv_right := Φ.inv_right
start := Φ.start
structure AmbientIsotopy where
H : ℝ → R3 → R3
Hinv : ℝ → R3 → R3
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
inv_left : ∀ t x, Hinv t (H t x) = x
inv_right : ∀ t x, H t (Hinv t x) = x
start : H 0 = id
MathlibExt/Topology/Knot/EuclideanLink.lean:74
structure AmbientIsotopy where
/-- The forward family. -/
H : ℝ → R3 → R3
/-- The inverse family. -/
Hinv : ℝ → R3 → R3
/-- The forward family is jointly smooth in `(t, x)`. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry H)
/-- The inverse family is jointly smooth in `(t, x)`. -/
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) (Function.uncurry Hinv)
/-- `Hinv t` is a left inverse of `H t`. -/
inv_left : ∀ t x, Hinv t (H t x) = x
/-- `Hinv t` is a right inverse of `H t`. -/
⋯
WantedExt/Topology/ConwayKnotShared.lean:103
Uses 4 · Used by 2
DefinitionConway-knot circle reparametrizations as Euclidean ones#✓fully proved
An orientation-preserving smooth reparametrization of the circle in the sense of the Conway knot statements, given by a smooth strictly increasing map \(f : \mathbb{R} \to \mathbb{R}\) with smooth two-sided inverse \(g\) such that \(f(t + 2\pi) = f(t) + 2\pi\) and \(g(t + 2\pi) = g(t) + 2\pi\) for all \(t\), is sent to the circle reparametrization, in the sense of parametrized links, with the same lift \(f\) and inverse lift \(g\).
def toEuclideanCircleReparam
(σ : ConwayKnotShared.KnotTheory.CircleReparam) :
Knot.Euclidean.CircleReparam where
f := σ.f
finv := σ.finv
smooth := σ.smooth
smooth_inv := σ.smooth_inv
left_inv := σ.left_inv
right_inv := σ.right_inv
periodic := σ.periodic
periodic_inv := σ.periodic_inv
mono := σ.mono
structure CircleReparam where
/-- A lift `ℝ → ℝ` of a circle self-map. -/
f : ℝ → ℝ
/-- A lifted inverse. -/
finv : ℝ → ℝ
/-- The lift is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) f
/-- The inverse lift is smooth. -/
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
/-- `finv` is a left inverse to `f`. -/
left_inv : ∀ t, finv (f t) = t
/-- `finv` is a right inverse to `f`. -/
⋯
WantedExt/Topology/ConwayKnotShared.lean:119
structure CircleReparam where
f : ℝ → ℝ
finv : ℝ → ℝ
smooth : ContDiff ℝ (⊤ : ℕ∞) f
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
left_inv : ∀ t, finv (f t) = t
right_inv : ∀ t, f (finv t) = t
periodic : ∀ t, f (t + 2 * Real.pi) = f t + 2 * Real.pi
periodic_inv : ∀ t, finv (t + 2 * Real.pi) = finv t + 2 * Real.pi
mono : StrictMono f
MathlibExt/Topology/Knot/EuclideanLink.lean:157
Uses 1 · Used by 2
DefinitionEuclidean circle reparametrizations as Conway-knot ones#✓fully proved
A circle reparametrization in the sense of parametrized links, given by a smooth strictly increasing map \(f : \mathbb{R} \to \mathbb{R}\) with smooth two-sided inverse \(g\) such that \(f(t + 2\pi) = f(t) + 2\pi\) and \(g(t + 2\pi) = g(t) + 2\pi\) for all \(t\), is sent to the orientation-preserving smooth reparametrization of the circle in the sense of the Conway knot statements with the same lift \(f\) and inverse lift \(g\).
def ofEuclideanCircleReparam (σ : Knot.Euclidean.CircleReparam) :
ConwayKnotShared.KnotTheory.CircleReparam where
f := σ.f
finv := σ.finv
smooth := σ.smooth
smooth_inv := σ.smooth_inv
left_inv := σ.left_inv
right_inv := σ.right_inv
periodic := σ.periodic
periodic_inv := σ.periodic_inv
mono := σ.mono
structure CircleReparam where
f : ℝ → ℝ
finv : ℝ → ℝ
smooth : ContDiff ℝ (⊤ : ℕ∞) f
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
left_inv : ∀ t, finv (f t) = t
right_inv : ∀ t, f (finv t) = t
periodic : ∀ t, f (t + 2 * Real.pi) = f t + 2 * Real.pi
periodic_inv : ∀ t, finv (t + 2 * Real.pi) = finv t + 2 * Real.pi
mono : StrictMono f
MathlibExt/Topology/Knot/EuclideanLink.lean:157
structure CircleReparam where
/-- A lift `ℝ → ℝ` of a circle self-map. -/
f : ℝ → ℝ
/-- A lifted inverse. -/
finv : ℝ → ℝ
/-- The lift is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) f
/-- The inverse lift is smooth. -/
smooth_inv : ContDiff ℝ (⊤ : ℕ∞) finv
/-- `finv` is a left inverse to `f`. -/
left_inv : ∀ t, finv (f t) = t
/-- `finv` is a right inverse to `f`. -/
⋯
WantedExt/Topology/ConwayKnotShared.lean:119
Uses 1 · Used by 2
TheoremIsotopy of knots agrees with isotopy of parametrized knots#✓fully proved
For all knots \(K_1\) and \(K_2\) in \(\mathbb{R}^3\), \(K_1\) and \(K_2\) are ambient isotopic if and only if the parametrized knots with the same parametrizations as \(K_1\) and \(K_2\) are ambient isotopic as parametrized knots.
theorem knot_isotopic_iff {K₁ K₂ : ConwayKnotShared.KnotTheory.Knot} :
ConwayKnotShared.KnotTheory.Knot.Isotopic K₁ K₂ ↔
Knot.Euclidean.ParametrizedKnot.Isotopic
(toParametrizedKnot K₁) (toParametrizedKnot K₂)
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
def Knot.Isotopic (K₁ K₂ : Knot) : Prop :=
∃ Φ : AmbientIsotopy, ∃ σ : CircleReparam, ∀ t, Φ.H 1 (K₁.curve t) = K₂.curve (σ.f t)
WantedExt/Topology/ConwayKnotShared.lean:142
def ParametrizedKnot.Isotopic (K₁ K₂ : ParametrizedKnot) : Prop :=
∃ Φ : AmbientIsotopy, ∃ σ : CircleReparam,
∀ t, Φ.H 1 (K₁.curve t) = K₂.curve (σ.f t)
MathlibExt/Topology/Knot/EuclideanLink.lean:220
def toParametrizedKnot (K : ConwayKnotShared.KnotTheory.Knot) :
Knot.Euclidean.ParametrizedKnot where
curve := K.curve
smooth := K.smooth
periodic := K.periodic
injOn := K.injOn
immersion := K.immersion
WantedExt/Topology/ConwayKnotEuclideanBridge.lean:43
Uses 14
DefinitionTwo-component links as labeled links#✓fully proved
A two-component link in \(\mathbb{R}^3\) with first component \(K\) and second component \(L\) is sent to the labeled parametrized link with two components whose component \(0\) is the parametrized knot with the same parametrization as \(K\) and whose component \(1\) is the parametrized knot with the same parametrization as \(L\).
def toParametrizedLink (L : ConwayKnotShared.KnotTheory.TwoLink) :
Knot.Euclidean.ParametrizedLink 2 where
component := ![toParametrizedKnot L.K, toParametrizedKnot L.L]
pairwiseDisjoint := by
intro i _ j _ hij
fin_cases i <;> fin_cases j
· exact absurd rfl hij
· exact L.disjoint
· exact L.disjoint.symm
· exact absurd rfl hij
structure TwoLink where
/-- The first component. -/
K : Knot
/-- The second component. -/
L : Knot
/-- The two components have disjoint images in `ℝ³`. -/
disjoint : Disjoint (Set.range K.curve) (Set.range L.curve)
WantedExt/Topology/ConwayKnotShared.lean:92
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
MathlibExt/Topology/Knot/EuclideanLink.lean:67
def toParametrizedKnot (K : ConwayKnotShared.KnotTheory.Knot) :
Knot.Euclidean.ParametrizedKnot where
curve := K.curve
smooth := K.smooth
periodic := K.periodic
injOn := K.injOn
immersion := K.immersion
WantedExt/Topology/ConwayKnotEuclideanBridge.lean:43
Uses 7 · Used by 1
DefinitionLabeled two-component links as two-component links#✓fully proved
A labeled parametrized link with two components \(0\) and \(1\) is sent to the two-component link in \(\mathbb{R}^3\) whose first component is the knot with the same parametrization as component \(0\) and whose second component is the knot with the same parametrization as component \(1\).
def ofParametrizedLink (L : Knot.Euclidean.ParametrizedLink 2) :
ConwayKnotShared.KnotTheory.TwoLink where
K := ofParametrizedKnot (L.component 0)
L := ofParametrizedKnot (L.component 1)
disjoint := by
have h := L.pairwiseDisjoint (Set.mem_univ 0) (Set.mem_univ 1)
(by decide : (0 : Fin 2) ≠ 1)
exact h
structure ParametrizedLink (n : ℕ) where
component : Fin n → ParametrizedKnot
pairwiseDisjoint : Set.PairwiseDisjoint (Set.univ : Set (Fin n))
(fun i => Set.range (component i).curve)
MathlibExt/Topology/Knot/EuclideanLink.lean:67
structure TwoLink where
/-- The first component. -/
K : Knot
/-- The second component. -/
L : Knot
/-- The two components have disjoint images in `ℝ³`. -/
disjoint : Disjoint (Set.range K.curve) (Set.range L.curve)
WantedExt/Topology/ConwayKnotShared.lean:92
def ofParametrizedKnot (K : Knot.Euclidean.ParametrizedKnot) :
ConwayKnotShared.KnotTheory.Knot where
curve := K.curve
smooth := K.smooth
periodic := K.periodic
injOn := K.injOn
immersion := K.immersion
WantedExt/Topology/ConwayKnotEuclideanBridge.lean:52
Uses 7
TheoremTwo-component link isotopy agrees with labeled link isotopy#✓fully proved
Let \(L_1\) and \(L_2\) be oriented two-component smooth links in \(\mathbb{R}^3\), and regard each as an oriented labeled smooth link with two components, whose component \(0\) is its first component and whose component \(1\) is its second. Then \(L_1\) and \(L_2\) are ambient isotopic, meaning that a single smooth ambient isotopy carries each component of \(L_1\) onto the corresponding component of \(L_2\) up to orientation-preserving reparametrizations of the circle, if and only if the associated labeled links are ambient isotopic.
theorem twoLink_isotopic_iff
{L₁ L₂ : ConwayKnotShared.KnotTheory.TwoLink} :
ConwayKnotShared.KnotTheory.TwoLink.Isotopic L₁ L₂ ↔
Knot.Euclidean.ParametrizedLink.Isotopic
(toParametrizedLink L₁) (toParametrizedLink L₂)
structure TwoLink where
/-- The first component. -/
K : Knot
/-- The second component. -/
L : Knot
/-- The two components have disjoint images in `ℝ³`. -/
disjoint : Disjoint (Set.range K.curve) (Set.range L.curve)
WantedExt/Topology/ConwayKnotShared.lean:92
def TwoLink.Isotopic (L₁ L₂ : TwoLink) : Prop :=
∃ Φ : AmbientIsotopy, ∃ σ τ : CircleReparam,
(∀ t, Φ.H 1 (L₁.K.curve t) = L₂.K.curve (σ.f t)) ∧
(∀ t, Φ.H 1 (L₁.L.curve t) = L₂.L.curve (τ.f t))
WantedExt/Topology/ConwayKnotShared.lean:148
def ParametrizedLink.Isotopic {n : ℕ}
(L₁ L₂ : ParametrizedLink n) : Prop :=
∃ Φ : AmbientIsotopy, ∃ σ : Fin n → CircleReparam,
∀ i t, Φ.H 1 ((L₁.component i).curve t) =
(L₂.component i).curve ((σ i).f t)
MathlibExt/Topology/Knot/EuclideanLink.lean:249
def toParametrizedLink (L : ConwayKnotShared.KnotTheory.TwoLink) :
Knot.Euclidean.ParametrizedLink 2 where
component := ![toParametrizedKnot L.K, toParametrizedKnot L.L]
pairwiseDisjoint := by
intro i _ j _ hij
fin_cases i <;> fin_cases j
· exact absurd rfl hij
· exact L.disjoint
· exact L.disjoint.symm
· exact absurd rfl hij
WantedExt/Topology/ConwayKnotEuclideanBridge.lean:148
Uses 16
TheoremNon-isotopic two-component links exist#●ready to prove
There exist two oriented smooth two-component links \(L_1\) and \(L_2\) in \(\mathbb{R}^3\) that are not ambient isotopic as oriented links with ordered components: no ambient isotopy of \(\mathbb{R}^3\) carries the first component of \(L_1\) to the first component of \(L_2\) and the second component of \(L_1\) to the second component of \(L_2\), each up to an orientation-preserving reparametrization of the circle.
public theorem_wanted exists_nonisotopic_link : ∃ L₁ L₂ : TwoLink, ¬ L₁.Isotopic L₂
structure TwoLink where
/-- The first component. -/
K : Knot
/-- The second component. -/
L : Knot
/-- The two components have disjoint images in `ℝ³`. -/
disjoint : Disjoint (Set.range K.curve) (Set.range L.curve)
WantedExt/Topology/ConwayKnotShared.lean:92
Sources
- Classical; see https://en.wikipedia.org/wiki/Linking_number. Problem
exists_nonisotopic_linkof the lean-eval benchmark.
Uses 2
TheoremExistence of non-isotopic knots#●ready to prove
There are two oriented smooth knots \(K_1\) and \(K_2\) in \(\mathbb{R}^3\) that are not ambient-isotopic.
public theorem_wanted exists_nonisotopic_knots : ∃ K₁ K₂ : Knot, ¬ K₁.Isotopic K₂
structure Knot where
/-- The parametrizing map. -/
curve : ℝ → R3
/-- The map is smooth. -/
smooth : ContDiff ℝ (⊤ : ℕ∞) curve
/-- The map has period `2π`. -/
periodic : ∀ t, curve (t + 2 * Real.pi) = curve t
/-- The map is injective on a fundamental period. -/
injOn : Set.InjOn curve (Set.Ico 0 (2 * Real.pi))
/-- The map is an immersion (its derivative is everywhere nonzero). -/
immersion : ∀ t, deriv curve t ≠ 0
WantedExt/Topology/ConwayKnotShared.lean:78
Sources
- Classical; see https://en.wikipedia.org/wiki/Knot_invariant. Problem
exists_nonisotopic_knotsof the lean-eval benchmark.
Uses 2
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.