A machine-checked solution to the Jacobians challenge

7.4. Path.CotangentCoeff🔗

Jacobians.Path.CotangentCoeffsource

continuousAt_inCoordinates

The continuous local object. Near x₀, the coordinate of the section α in the FIXED hom-bundle trivialization at x₀ is continuous (indeed it is ContMDiffAt) as a map into the fixed normed space ℂ →L[ℂ] ℂ. This is inCoordinates (α x).

theorem continuousAt_inCoordinates {X : Type*} [TopologicalSpace X] [T2Space X] [CompactSpace X]
    [ConnectedSpace X] [ChartedSpace ℂ X] [IsManifold 𝓘(ℂ) ω X] (α : HolomorphicOneForms X) (x₀ : X)
    :
    ContinuousAt (fun x : X => ContinuousLinearMap.inCoordinates ℂ
      (TangentSpace 𝓘(ℂ) (M := X)) ℂ (Bundle.Trivial X ℂ) x₀ x x₀ x (α.toFun x)) x₀

continuousAt_localCoeff

The local coefficient is continuous. x ↦ inCoordinates (α x) 1 (the coefficient of α read in the FIXED chart at x₀, i.e. α paired with the *coordinate vector field of the chart at x₀*) is continuous at x₀. NOTE this is inCoordinates (α x) 1, not the discontinuous α x 1.

theorem continuousAt_localCoeff {X : Type*} [TopologicalSpace X] [T2Space X] [CompactSpace X]
    [ConnectedSpace X] [ChartedSpace ℂ X] [IsManifold 𝓘(ℂ) ω X] (α : HolomorphicOneForms X) (x₀ : X)
    :
    ContinuousAt (fun x : X => ContinuousLinearMap.inCoordinates ℂ
      (TangentSpace 𝓘(ℂ) (M := X)) ℂ (Bundle.Trivial X ℂ) x₀ x x₀ x (α.toFun x) (1 : ℂ)) x₀

apply_eq_inCoordinates

General-vector form of target_eq_inCoordinates_of_w. For any tangent vector v at x ∈ (chartAt ℂ x₀).source, applying the form equals applying its fixed-x₀-trivialization inCoordinates representation to v read in that trivialization. (The v = 1 case is the obstruction lemma target_eq_inCoordinates_of_w; this general version is what lets a chart-patchwork rewrite the line-integral integrand α.toFun (γ s) (pathSpeed γ s) into a product of the continuous local coefficient and the trivialized velocity.)

theorem apply_eq_inCoordinates {X : Type*} [TopologicalSpace X] [T2Space X] [CompactSpace X]
    [ConnectedSpace X] [ChartedSpace ℂ X] [IsManifold 𝓘(ℂ) ω X] (α : HolomorphicOneForms X)
    (x₀ x : X)
    (hx : x ∈ (chartAt ℂ x₀).source) (v : TangentSpace 𝓘(ℂ) x) :
    α.toFun x v =
      ContinuousLinearMap.inCoordinates ℂ (TangentSpace 𝓘(ℂ) (M := X)) ℂ (Bundle.Trivial X ℂ)
        x₀ x x₀ x (α.toFun x)
        ((trivializationAt ℂ (TangentSpace 𝓘(ℂ) (M := X)) x₀).continuousLinearMapAt ℂ x v)

continuousOn_form_pathSpeed

Continuous velocity tangent-section ⇒ the form integrand is ContinuousOn [0,1].

theorem continuousOn_form_pathSpeed {X : Type*} [TopologicalSpace X] [T2Space X] [CompactSpace X]
    [ConnectedSpace X] [ChartedSpace ℂ X] [IsManifold 𝓘(ℂ) ω X] (α : HolomorphicOneForms X)
    (γ : ℝ → X)
    (hvel : ContinuousOn (fun s : ℝ =>
        (Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := X)) (γ s) (pathSpeed γ s)))
      (Set.Icc 0 1)) :
    ContinuousOn (fun s : ℝ => α.toFun (γ s) (pathSpeed γ s)) (Set.Icc 0 1)

intervalIntegrable_form_pathSpeed_of_velContinuous

Continuous velocity tangent-section ⇒ the form integrand is interval-integrable on [0,1]. The justification for the genuinely- loop predicate: the integrable field follows from the velocity-continuity (velCont) field.

theorem intervalIntegrable_form_pathSpeed_of_velContinuous {X : Type*} [TopologicalSpace X]
    [T2Space X] [CompactSpace X] [ConnectedSpace X] [ChartedSpace ℂ X] [IsManifold 𝓘(ℂ) ω X]
    (α : HolomorphicOneForms X) (γ : ℝ → X)
    (hvel : ContinuousOn (fun s : ℝ =>
        (Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := X)) (γ s) (pathSpeed γ s)))
      (Set.Icc 0 1)) :
    IntervalIntegrable (fun s : ℝ => α.toFun (γ s) (pathSpeed γ s)) MeasureTheory.volume 0 1

pathSpeed_comp_eq_mfderiv_of_mdiff

Local analogue of pathSpeed_comp_eq_mfderiv: only MDifferentiableAt f (γ t) is needed (the global ContMDiff f in the original is used solely to produce this), so it applies to local sections. The source X need *not* be compact (used with X = ℂ in the ChartBall base case).

theorem pathSpeed_comp_eq_mfderiv_of_mdiff {X : Type*} [TopologicalSpace X]
    [ChartedSpace ℂ X] {Y : Type*} [TopologicalSpace Y] [ChartedSpace ℂ Y]
    (f : X → Y) (γ : ℝ → X) (t : ℝ)
    (hf_mdiff : MDifferentiableAt 𝓘(ℂ) 𝓘(ℂ) f (γ t))
    (hγ_cont : ContinuousAt γ t)
    (hγ_diff : DifferentiableAt ℝ ((chartAt (H := ℂ) (γ t)).toFun ∘ γ) t) :
    pathSpeed (f ∘ γ) t = mfderiv 𝓘(ℂ) 𝓘(ℂ) f (γ t) (pathSpeed γ t)

velCont_comp

GLOBAL: velocity-section continuity is preserved by a global C^ω map. For the IsClosedSmoothLoop.comp constructor. Identifies velocity-section(f∘γ) with tangentMap f applied to velocity-section(γ) (pointwise via pathSpeed_comp_eq_mfderiv), then composes with the continuous tangentMap f.

theorem velCont_comp {X : Type*} [TopologicalSpace X] [T2Space X] [CompactSpace X]
    [ConnectedSpace X] [ChartedSpace ℂ X] [IsManifold 𝓘(ℂ) ω X] {Y : Type*} [TopologicalSpace Y]
    [T2Space Y] [CompactSpace Y] [ConnectedSpace Y] [ChartedSpace ℂ Y] [IsManifold 𝓘(ℂ) ω Y]
    (f : X → Y) (hf : ContMDiff 𝓘(ℂ) 𝓘(ℂ) ω f) (γ : ℝ → X)
    (hγcont : Continuous γ)
    (hγdiff : ∀ s ∈ Set.Icc (0 : ℝ) 1,
      DifferentiableAt ℝ ((chartAt (H := ℂ) (γ s)).toFun ∘ γ) s)
    (hγ : ContinuousOn (fun s : ℝ => (Bundle.TotalSpace.mk' ℂ
      (E := TangentSpace 𝓘(ℂ) (M := X)) (γ s) (pathSpeed γ s))) (Set.Icc 0 1)) :
    ContinuousOn (fun s : ℝ => (Bundle.TotalSpace.mk' ℂ
      (E := TangentSpace 𝓘(ℂ) (M := Y)) (f (γ s)) (pathSpeed (f ∘ γ) s))) (Set.Icc 0 1)

velCont_compOn

Local: velocity-section continuity is preserved by a map C^ω on an open set. For the §3 lift g∘γ (g a local section) and the ChartBall base case. Open V upgrades ContMDiffOn to ContMDiffAt/MDifferentiableAt, so pathSpeed_comp_eq_mfderiv_of_mdiff applies, and tangentMapWithin g V = tangentMap g on V. The source Y need NOT be compact (the ChartBall base case takes Y = ℂ, the non-compact model space).

theorem velCont_compOn {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    [IsManifold 𝓘(ℂ) ω X] {Y : Type*} [TopologicalSpace Y] [ChartedSpace ℂ Y]
    [IsManifold 𝓘(ℂ) ω Y]
    (g : Y → X) {V : Set Y} (hg : ContMDiffOn 𝓘(ℂ) 𝓘(ℂ) ω g V)
    (hVo : IsOpen V) (γ : ℝ → Y) (hγV : ∀ s ∈ Set.Icc (0 : ℝ) 1, γ s ∈ V)
    (hγcont : Continuous γ)
    (hγdiff : ∀ s ∈ Set.Icc (0 : ℝ) 1,
      DifferentiableAt ℝ ((chartAt (H := ℂ) (γ s)).toFun ∘ γ) s)
    (hγ : ContinuousOn (fun s : ℝ => (Bundle.TotalSpace.mk' ℂ
      (E := TangentSpace 𝓘(ℂ) (M := Y)) (γ s) (pathSpeed γ s))) (Set.Icc 0 1)) :
    ContinuousOn (fun s : ℝ => (Bundle.TotalSpace.mk' ℂ
      (E := TangentSpace 𝓘(ℂ) (M := X)) (g (γ s)) (pathSpeed (g ∘ γ) s))) (Set.Icc 0 1)

velCont_reverse

Velocity-section continuity is preserved by time-reversal. For the IsClosedSmoothLoop.reverse/IsSmoothPath.reverse constructors. The reversed velocity section is s ↦ ⟨γ(1-s), -pathSpeed γ(1-s)⟩ (via pathSpeed_reverse, needs hγdiff at 1-s); base continuity comes from reparametrizing the original base by s ↦ 1-s, and the trivialized fibre is the negation of the original's (negation is ℂ-linear, passes through continuousLinearMapAt).

theorem velCont_reverse {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    [IsManifold 𝓘(ℂ) ω X] (γ : ℝ → X)
    (hγdiff : ∀ t ∈ Set.uIcc (0:ℝ) 1,
      DifferentiableAt ℝ ((chartAt (H := ℂ) (γ t)).toFun ∘ γ) t)
    (hγ : ContinuousOn (fun s : ℝ =>
        Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := X)) (γ s) (pathSpeed γ s))
      (Set.Icc 0 1)) :
    ContinuousOn (fun s : ℝ =>
        Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := X))
          (Jacobians.reverse γ s) (pathSpeed (Jacobians.reverse γ) s))
      (Set.Icc 0 1)

pathSpeed_concat_junction

The junction velocity of a concatenation vanishes, given both pieces' chart-pullback differentiability and vanishing endpoint velocities (pathSpeed γ₁ 1 = 0, pathSpeed γ₂ 0 = 0) and matched basepoints γ₁ 1 = γ₂ 0. This is the velocity restatement of the junction step of the IsSmoothPath.concat diff field (HasDerivWithinAt … 0 glued on Iic ∪ Ici).

theorem pathSpeed_concat_junction {X : Type*} [TopologicalSpace X] [CompactSpace X]
    [ConnectedSpace X] [ChartedSpace ℂ X] [IsManifold 𝓘(ℂ) ω X] (γ₁ γ₂ : ℝ → X)
    (h₁diff : DifferentiableAt ℝ ((chartAt (H := ℂ) (γ₁ 1)).toFun ∘ γ₁) 1)
    (h₂diff : DifferentiableAt ℝ ((chartAt (H := ℂ) (γ₂ 0)).toFun ∘ γ₂) 0)
    (hv₁ : pathSpeed γ₁ 1 = 0) (hv₂ : pathSpeed γ₂ 0 = 0) (hjoin : γ₁ 1 = γ₂ 0) :
    pathSpeed (Jacobians.concat γ₁ γ₂) (1/2) = 0

velCont_affineReparam

Velocity-section continuity under an affine reparametrization s ↦ a*s + b with the fibre rescaled by a. This is the shape of each half of concat (left: a = 2, b = 0; right: a = 2, b = -1), where pathSpeed (concat) s = 2 * pathSpeed γᵢ (2s + …). Mirrors velCont_reverse (itself the a = -1, b = 1 case): base continuity from reparametrizing the projection, fibre continuity from the original trivialized fibre scaled by a (scaling is ℂ-linear, passes through continuousLinearMapAt).

theorem velCont_affineReparam {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    [IsManifold 𝓘(ℂ) ω X] (γ : ℝ → X) (a b : ℝ) {D : Set ℝ}
    (hmaps : Set.MapsTo (fun s : ℝ => a * s + b) D (Set.Icc 0 1))
    (hγ : ContinuousOn (fun s : ℝ =>
        Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := X)) (γ s) (pathSpeed γ s))
      (Set.Icc 0 1)) :
    ContinuousOn (fun s : ℝ =>
        Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := X))
          (γ (a * s + b)) ((a : ℂ) • pathSpeed γ (a * s + b)))
      D

velCont_reparam

Velocity-section continuity under a smooth scalar reparametrization σ. For the smoothPathSmooth = smoothPath ∘ smoothStep01 case: given the chain-rule fact pathSpeed (γ ∘ σ) s = σ'(s) • pathSpeed γ (σ s) (supplied as hspeed, from pathSpeed_smoothStep01_comp_eq), a continuous reparam σ mapping D into [0,1], and a continuous scaling σ', the reparametrized velocity section is continuous on D. Generalizes velCont_affineReparam (constant scale a) to a varying scale σ'.

theorem velCont_reparam {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    [IsManifold 𝓘(ℂ) ω X] (γ : ℝ → X) (σ σ' : ℝ → ℝ) {D : Set ℝ}
    (hmaps : Set.MapsTo σ D (Set.Icc 0 1)) (hσcont : ContinuousOn σ D)
    (hσ'cont : ContinuousOn (fun s : ℝ => (σ' s : ℂ)) D)
    (hspeed : ∀ s ∈ D, pathSpeed (γ ∘ σ) s = (σ' s : ℂ) • pathSpeed γ (σ s))
    (hγ : ContinuousOn (fun s : ℝ =>
        Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := X)) (γ s) (pathSpeed γ s))
      (Set.Icc 0 1)) :
    ContinuousOn (fun s : ℝ =>
        Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := X))
          ((γ ∘ σ) s) (pathSpeed (γ ∘ σ) s))
      D

velCont_concat

Velocity-section continuity is preserved by concatenation at vanishing junction velocities. For the IsSmoothPath.concat constructor. On each open half the concatenation's velocity section is the corresponding piece's section reparametrized ( left, 2·-1 right) with the fibre scaled by 2 (pathSpeed_concat_left/right, via velCont_affineReparam); at the junction s = ½ both the actual junction velocity (pathSpeed_concat_junction, = 0) and each scaled-reparam value (2 • pathSpeed γ₁ 1 = 0 by hv₁, resp. hv₂) vanish and the bases match (hjoin), so the concat-section coincides with each clean reparam section up to and INCLUDING ½, and the two one-sided ContinuousWithinAts glue (ContinuousWithinAt.union on Iic ½ ∪ Ici ½ = univ).

theorem velCont_concat {X : Type*} [TopologicalSpace X] [CompactSpace X]
    [ConnectedSpace X] [ChartedSpace ℂ X] [IsManifold 𝓘(ℂ) ω X] (γ₁ γ₂ : ℝ → X)
    (h₁diff : ∀ t ∈ Set.uIcc (0:ℝ) 1,
      DifferentiableAt ℝ ((chartAt (H := ℂ) (γ₁ t)).toFun ∘ γ₁) t)
    (h₂diff : ∀ t ∈ Set.uIcc (0:ℝ) 1,
      DifferentiableAt ℝ ((chartAt (H := ℂ) (γ₂ t)).toFun ∘ γ₂) t)
    (hv₁ : pathSpeed γ₁ 1 = 0) (hv₂ : pathSpeed γ₂ 0 = 0) (hjoin : γ₁ 1 = γ₂ 0)
    (hγ₁ : ContinuousOn (fun s : ℝ =>
        Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := X)) (γ₁ s) (pathSpeed γ₁ s))
      (Set.Icc 0 1))
    (hγ₂ : ContinuousOn (fun s : ℝ =>
        Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := X)) (γ₂ s) (pathSpeed γ₂ s))
      (Set.Icc 0 1)) :
    ContinuousOn (fun s : ℝ =>
        Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := X))
          (Jacobians.concat γ₁ γ₂ s) (pathSpeed (Jacobians.concat γ₁ γ₂) s))
      (Set.Icc 0 1)

velCont_modelPath

Velocity-section continuity of a path into the model space ℂ. For ℂ the chart at any point is the identity, so pathSpeed β = deriv β and the tangent bundle is trivial; the velocity section is therefore continuous as soon as β and deriv β are. This is the base-path velocity input for the ChartBallPathSmooth case of the C¹ refactor (composed with (chartAt ℂ Q₀).symm via velCont_compOn).

theorem velCont_modelPath (β : ℝ → ℂ) (hβ : Continuous β) (hβ' : Continuous (deriv β)) :
    ContinuousOn (fun s : ℝ =>
        Bundle.TotalSpace.mk' ℂ (E := TangentSpace 𝓘(ℂ) (M := ℂ)) (β s) (pathSpeed β s))
      (Set.Icc 0 1)