Documentation

Atlas.DifferentialGeometry.code.Geodesics

def Geodesics.IsGeodesic {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) :
Instances For
    theorem Geodesics.deriv_mem_tangentSpace {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))} {ψ : EuclideanSpace ℝ (Fin (n + 1)) → ℝ} (hsmooth : ContDiff ℝ ⊤ γ) (hM : ∀ (t : ℝ), γ t ∈ M) {t : ℝ} (hψ : Hypersurface.IsLocalDefiningFunction ψ M (γ t)) :
    theorem Geodesics.geodesic_constant_speed {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hHyp : Hypersurface.IsHypersurface M) (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (hγ : IsGeodesic M hHyp γ) :
    ∃ (c : ℝ), ∀ (t : ℝ), ‖deriv γ t‖ = c
    noncomputable def Geodesics.energy {n : ℕ} (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) :
    Instances For
      structure Geodesics.SmoothVariation {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) :
      Instances For
        noncomputable def Geodesics.firstVariationEnergy {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))} {a b : ℝ} (V : SmoothVariation M γ a b) :
        Instances For
          noncomputable def Geodesics.variationField {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))} {a b : ℝ} (V : SmoothVariation M γ a b) (t : ℝ) :
          Instances For
            theorem Geodesics.variationField_mem_tangentSpace {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))} {a b : ℝ} (V : SmoothVariation M γ a b) {ψ : EuclideanSpace ℝ (Fin (n + 1)) → ℝ} {t : ℝ} (hψ : Hypersurface.IsLocalDefiningFunction ψ M (γ t)) :
            theorem Geodesics.first_variation_formula {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))} {a b : ℝ} (V : SmoothVariation M γ a b) (hγ_smooth : ContDiff ℝ ⊤ γ) :
            theorem Geodesics.critical_energy_implies_geodesic {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) (hab : a < b) (hγ_smooth : ContDiff ℝ ⊤ γ) (hγ_in : ∀ (t : ℝ), γ t ∈ M) (hcrit : ∀ (V : SmoothVariation M γ a b), firstVariationEnergy V = 0) :
            IsGeodesic M hM γ
            theorem Geodesics.geodesic_iff_critical_energy {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) (hab : a < b) (hγ_smooth : ContDiff ℝ ⊤ γ) (hγ_in : ∀ (t : ℝ), γ t ∈ M) :
            IsGeodesic M hM γ ↔ ∀ (V : SmoothVariation M γ a b), firstVariationEnergy V = 0
            def Geodesics.IsEnergyMinimizer {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) :
            Instances For
              theorem Geodesics.energy_differentiableAt_variation {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))} {a b : ℝ} (V : SmoothVariation M γ a b) :
              DifferentiableAt ℝ (fun (s : ℝ) => energy (V.Γ s) a b) 0
              theorem Geodesics.geodesic_of_energy_minimizer {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) (hab : a < b) (hγ_smooth : ContDiff ℝ ⊤ γ) (hγ_in : ∀ (t : ℝ), γ t ∈ M) (hmin : IsEnergyMinimizer M γ a b) :
              IsGeodesic M hM γ
              def Geodesics.IsGeodesicOn {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (I : Set ℝ) :
              Instances For
                theorem Geodesics.geodesic_local_agreement {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {hM : Hypersurface.IsHypersurface M} {γ γ' : ℝ → EuclideanSpace ℝ (Fin (n + 1))} (hγ : IsGeodesic M hM γ) (hγ' : IsGeodesic M hM γ') (t₀ : ℝ) (h_pos : γ t₀ = γ' t₀) (h_vel : deriv γ t₀ = deriv γ' t₀) :
                ∀ᶠ (t : ℝ) in nhds t₀, γ t = γ' t ∧ deriv γ t = deriv γ' t
                theorem Geodesics.geodesic_uniqueness {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (γ γ' : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (hγ : IsGeodesic M hM γ) (hγ' : IsGeodesic M hM γ') (h_pos : γ 0 = γ' 0) (h_vel : deriv γ 0 = deriv γ' 0) (t : ℝ) :
                γ t = γ' t
                theorem Geodesics.geodesic_existence {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (y : EuclideanSpace ℝ (Fin (n + 1))) (hy : y ∈ M) (ψ : EuclideanSpace ℝ (Fin (n + 1)) → ℝ) (hψ : Hypersurface.IsLocalDefiningFunction ψ M y) (Y : EuclideanSpace ℝ (Fin (n + 1))) (hY : Y ∈ Hypersurface.tangentSpace ψ y) :
                ∃ (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))), IsGeodesic M hM γ ∧ γ 0 = y ∧ deriv γ 0 = Y
                theorem Geodesics.path_length_eq_distance_iff {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [CompleteSpace E] [StrictConvexSpace ℝ E] (γ : ℝ → E) (a b : ℝ) (hab : a < b) (hγ : ContDiff ℝ ⊤ γ) :
                ∫ (t : ℝ) in a..b, ‖deriv γ t‖ = ‖γ b - γ a‖ ↔ ∀ t ∈ Set.Icc a b, ∃ (c : ℝ), 0 ≤ c ∧ deriv γ t = c • (γ b - γ a)
                Instances For
                  theorem Geodesics.patch_partialDeriv_mem_tangentSpace {n : ℕ} (patch : HypersurfacePatch n) (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hpatch_in_M : ∀ x ∈ patch.domain, (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x) ∈ M) (x : Fin n → ℝ) (hx : x ∈ patch.domain) (ψ : EuclideanSpace ℝ (Fin (n + 1)) → ℝ) (hψ : Hypersurface.IsLocalDefiningFunction ψ M ((WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x))) (s : Fin n) :
                  (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.partialDeriv x s) ∈ Hypersurface.tangentSpace ψ ((WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x))
                  theorem Geodesics.metric_christoffel_identity {n : ℕ} (patch : HypersurfacePatch n) (x : Fin n → ℝ) (hx : x ∈ patch.domain) (i j s : Fin n) :
                  theorem Geodesics.second_deriv_inner_product_eq {n : ℕ} (patch : HypersurfacePatch n) (c : ℝ → Fin n → ℝ) (hc_smooth : ContDiff ℝ ⊤ c) (hc_domain : ∀ (t : ℝ), c t ∈ patch.domain) (t : ℝ) (s : Fin n) :
                  inner ℝ (deriv (deriv fun (t : ℝ) => (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f (c t))) t) ((WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.partialDeriv (c t) s)) = ∑ i : Fin n, ∑ j : Fin n, ChristoffelSymbols.secondPartialDeriv patch (c t) i j ⬝ᵥ patch.partialDeriv (c t) s * deriv c t i * deriv c t j + ∑ k : Fin n, patch.partialDeriv (c t) k ⬝ᵥ patch.partialDeriv (c t) s * deriv (deriv c) t k
                  theorem Geodesics.geodesic_inner_product_formula {n : ℕ} (patch : HypersurfacePatch n) (c : ℝ → Fin n → ℝ) (hc_smooth : ContDiff ℝ ⊤ c) (hc_domain : ∀ (t : ℝ), c t ∈ patch.domain) (t : ℝ) (s : Fin n) :
                  inner ℝ (deriv (deriv fun (t : ℝ) => (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f (c t))) t) ((WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.partialDeriv (c t) s)) = ∑ k : Fin n, firstFundamentalForm patch (c t) s k * (deriv (deriv c) t k + ∑ i : Fin n, ∑ j : Fin n, ChristoffelSymbols.christoffelSymbol patch (c t) i j k * deriv c t i * deriv c t j)
                  theorem Geodesics.patch_comp_smooth {n : ℕ} (patch : HypersurfacePatch n) (c : ℝ → Fin n → ℝ) (hc_smooth : ContDiff ℝ ⊤ c) (hc_domain : ∀ (t : ℝ), c t ∈ patch.domain) :
                  ContDiff ℝ ⊤ fun (t : ℝ) => (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f (c t))
                  theorem Geodesics.tangentSpace_mem_span_partialDerivs {n : ℕ} (patch : HypersurfacePatch n) (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (hpatch_in_M : ∀ x ∈ patch.domain, (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x) ∈ M) (x : Fin n → ℝ) (hx : x ∈ patch.domain) (ψ : EuclideanSpace ℝ (Fin (n + 1)) → ℝ) (hψ : Hypersurface.IsLocalDefiningFunction ψ M ((WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x))) (v : EuclideanSpace ℝ (Fin (n + 1))) (hv : v ∈ Hypersurface.tangentSpace ψ ((WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x))) :
                  ∃ (a : Fin n → ℝ), v = ∑ s : Fin n, a s • (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.partialDeriv x s)
                  theorem Geodesics.geodesic_ortho_from_ode {n : ℕ} (patch : HypersurfacePatch n) (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (c : ℝ → Fin n → ℝ) (hc_smooth : ContDiff ℝ ⊤ c) (hc_domain : ∀ (t : ℝ), c t ∈ patch.domain) (hpatch_in_M : ∀ x ∈ patch.domain, (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x) ∈ M) (hode : ∀ (t : ℝ) (k : Fin n), deriv (deriv c) t k + ∑ i : Fin n, ∑ j : Fin n, ChristoffelSymbols.christoffelSymbol patch (c t) i j k * deriv c t i * deriv c t j = 0) (t : ℝ) (ψ : EuclideanSpace ℝ (Fin (n + 1)) → ℝ) (hψ : Hypersurface.IsLocalDefiningFunction ψ M ((WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f (c t)))) (v : EuclideanSpace ℝ (Fin (n + 1))) (hv : v ∈ Hypersurface.tangentSpace ψ ((WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f (c t)))) :
                  inner ℝ (deriv (deriv fun (t : ℝ) => (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f (c t))) t) v = 0
                  theorem Geodesics.geodesic_equation_coordinates {n : ℕ} (patch : HypersurfacePatch n) (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (c : ℝ → Fin n → ℝ) (hc_smooth : ContDiff ℝ ⊤ c) (hc_domain : ∀ (t : ℝ), c t ∈ patch.domain) (hpatch_in_M : ∀ x ∈ patch.domain, (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x) ∈ M) :
                  (IsGeodesic M hM fun (t : ℝ) => (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f (c t))) ↔ SatisfiesGeodesicEquation patch c
                  structure Geodesics.SmoothPathIn {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (p q : EuclideanSpace ℝ (Fin (n + 1))) :
                  Instances For
                    noncomputable def Geodesics.pathLength {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {p q : EuclideanSpace ℝ (Fin (n + 1))} (γ : SmoothPathIn M p q) :
                    Instances For
                      def Geodesics.reversePath {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {p q : EuclideanSpace ℝ (Fin (n + 1))} (γ : SmoothPathIn M p q) :
                      Instances For
                        noncomputable def Geodesics.geodesicDist {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (p q : EuclideanSpace ℝ (Fin (n + 1))) :
                        Instances For
                          def Geodesics.IsSmoothOnHypersurface {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (M : Set E) (f : ↑M → ℝ) :
                          Instances For
                            Instances For
                              Instances For
                                theorem Geodesics.smooth_concat_exists_path {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) {p q r : EuclideanSpace ℝ (Fin (n + 1))} (α : SmoothPathIn M p q) (β : SmoothPathIn M q r) :
                                ∃ (δ : SmoothPathIn M p r), pathLength δ ≤ pathLength α + pathLength β
                                theorem Geodesics.geodesicDist_comm {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (p q : EuclideanSpace ℝ (Fin (n + 1))) :
                                theorem Geodesics.geodesicDist_eq_zero_iff {n : ℕ} (M : ConnectedHypersurfaceWithPaths n) (p q : EuclideanSpace ℝ (Fin (n + 1))) (hp : p ∈ M.carrier) (hq : q ∈ M.carrier) (heq : geodesicDist M.carrier p q = 0) :
                                p = q
                                theorem Geodesics.cauchy_schwarz_integral (f : ℝ → ℝ) (hf : Continuous f) (a b : ℝ) (hab : a < b) :
                                ∫ (t : ℝ) in a..b, f t ≤ √(b - a) * √(∫ (t : ℝ) in a..b, f t ^ 2) ∧ (∫ (t : ℝ) in a..b, f t = √(b - a) * √(∫ (t : ℝ) in a..b, f t ^ 2) ↔ ∃ (c : ℝ), ∀ t ∈ Set.Icc a b, f t = c)
                                theorem Geodesics.cauchy_schwarz_integral_eq_iff (f : ℝ → ℝ) (hf : Continuous f) (hf_nn : ∀ (t : ℝ), 0 ≤ f t) (a b : ℝ) (hab : a < b) :
                                ∫ (t : ℝ) in a..b, f t = √(b - a) * √(∫ (t : ℝ) in a..b, f t ^ 2) ↔ ∃ (c : ℝ), ∀ t ∈ Set.Icc a b, f t = c
                                noncomputable def Geodesics.lengthAB {n : ℕ} (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) :
                                Instances For
                                  theorem Geodesics.energy_ge_length_sq_div {n : ℕ} (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) (hab : a < b) (hγ : ContDiff ℝ ⊤ γ) :
                                  energy γ a b ≥ lengthAB γ a b ^ 2 / (b - a) ∧ (energy γ a b = lengthAB γ a b ^ 2 / (b - a) ↔ ∃ (c : ℝ), ∀ t ∈ Set.Icc a b, ‖deriv γ t‖ = c)
                                  noncomputable def Geodesics.pathEnergy {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {p q : EuclideanSpace ℝ (Fin (n + 1))} (γ : SmoothPathIn M p q) :
                                  Instances For
                                    def Geodesics.IsConstantSpeed {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {p q : EuclideanSpace ℝ (Fin (n + 1))} (γ : SmoothPathIn M p q) :
                                    Instances For
                                      def Geodesics.IsAbsoluteLengthMinimizer {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {p q : EuclideanSpace ℝ (Fin (n + 1))} (γ : SmoothPathIn M p q) :
                                      Instances For
                                        def Geodesics.IsAbsoluteEnergyMinimizer {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {p q : EuclideanSpace ℝ (Fin (n + 1))} (γ : SmoothPathIn M p q) :
                                        Instances For
                                          theorem Geodesics.energy_ge_length_sq {n : ℕ} {M : Set (EuclideanSpace ℝ (Fin (n + 1)))} {p q : EuclideanSpace ℝ (Fin (n + 1))} (γ : SmoothPathIn M p q) :
                                          def Geodesics.IsMetricGeodesic {X : Type u_1} [MetricSpace X] (γ : ℝ → X) (a b : ℝ) :
                                          Instances For
                                            def Geodesics.IsGlobalMetricGeodesic {X : Type u_1} [MetricSpace X] (γ : ℝ → X) :
                                            Instances For
                                              Instances For
                                                theorem Geodesics.gauss_map_injective_of_positive_curvature {n : ℕ} (M : CompactPositiveGaussCurvature n) (hn : 2 ≤ n) (ν : EuclideanSpace ℝ (Fin (n + 1)) → EuclideanSpace ℝ (Fin (n + 1))) (hν_maps : ∀ y ∈ M.carrier, ν y ∈ GaussMap.unitSphere n) (hν_smooth : ContDiffOn ℝ ⊤ ν M.carrier) (hν_gauss_map : ∀ (patch : HypersurfacePatch n), ∀ x ∈ patch.domain, (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x) ∈ M.carrier → ν ((WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x)) = (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (gaussNormal patch x)) (y : EuclideanSpace ℝ (Fin (n + 1))) :
                                                y ∈ M.carrier → ∀ (ψ : EuclideanSpace ℝ (Fin (n + 1)) → ℝ), Hypersurface.IsLocalDefiningFunction ψ M.carrier y → ∀ v ∈ Hypersurface.tangentSpace ψ y, (fderiv ℝ ν y) v = 0 → v = 0
                                                theorem Geodesics.convex_of_bijective_gauss_map {n : ℕ} (M : CompactPositiveGaussCurvature n) (hn : 2 ≤ n) (ν : EuclideanSpace ℝ (Fin (n + 1)) → EuclideanSpace ℝ (Fin (n + 1))) (hν_maps : ∀ y ∈ M.carrier, ν y ∈ GaussMap.unitSphere n) (hν_bij : Function.Bijective fun (y : ↑M.carrier) => ⟨ν ↑y, ⋯⟩) :
                                                theorem Geodesics.hadamard_convexity {n : ℕ} (M : CompactPositiveGaussCurvature n) (hn : 2 ≤ n) (ν : EuclideanSpace ℝ (Fin (n + 1)) → EuclideanSpace ℝ (Fin (n + 1))) (hν_maps : ∀ y ∈ M.carrier, ν y ∈ GaussMap.unitSphere n) (hν_smooth : ContDiffOn ℝ ⊤ ν M.carrier) (hν_gauss_map : ∀ (patch : HypersurfacePatch n), ∀ x ∈ patch.domain, (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x) ∈ M.carrier → ν ((WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (patch.f x)) = (WithLp.equiv 2 (Fin (n + 1) → ℝ)).symm (gaussNormal patch x)) :
                                                def Geodesics.IsMinimizingGeodesic {n : ℕ} (M : ConnectedHypersurface n) (p q : EuclideanSpace ℝ (Fin (n + 1))) (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) :
                                                Instances For
                                                  theorem Geodesics.hopf_rinow_minimizing_geodesic {n : ℕ} (M : ConnectedHypersurface n) (hM : IsClosed M.carrier) (p q : EuclideanSpace ℝ (Fin (n + 1))) (hp : p ∈ M.carrier) (hq : q ∈ M.carrier) (a b : ℝ) (hab : a < b) :
                                                  ∃ (γ : ℝ → EuclideanSpace ℝ (Fin (n + 1))), IsMinimizingGeodesic M p q γ a b
                                                  Instances For
                                                    Instances For
                                                      Instances
                                                        theorem Geodesics.busemann_unique_geodesic {X : Type u_1} [MetricSpace X] [IsBusemannSpace X] (p q : X) :
                                                        (∃ (γ : ℝ → X), IsMetricGeodesic γ 0 (dist p q) ∧ γ 0 = p ∧ γ (dist p q) = q) ∧ ∀ (γ₁ γ₂ : ℝ → X), IsMetricGeodesic γ₁ 0 (dist p q) → γ₁ 0 = p → γ₁ (dist p q) = q → IsMetricGeodesic γ₂ 0 (dist p q) → γ₂ 0 = p → γ₂ (dist p q) = q → ∀ t ∈ Set.Icc 0 (dist p q), γ₁ t = γ₂ t
                                                        theorem Geodesics.cauchy_schwarz_energy_length {n : ℕ} (σ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) (hab : a < b) (hσ : ContDiff ℝ ⊤ σ) :
                                                        (∫ (t : ℝ) in a..b, ‖deriv σ t‖) ^ 2 ≤ (b - a) * ∫ (t : ℝ) in a..b, ‖deriv σ t‖ ^ 2
                                                        theorem Geodesics.geodesic_locally_minimizes_length {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (γ σ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) (hab : a < b) (hγ_geo : IsGeodesic M hM γ) (hγ_unit : ∀ (t : ℝ), ‖deriv γ t‖ = 1) (hσ : ContDiff ℝ ⊤ σ) (hσ_in : ∀ (t : ℝ), σ t ∈ M) (hendpoints : σ a = γ a ∧ σ b = γ b) :
                                                        ∫ (t : ℝ) in a..b, ‖deriv σ t‖ ≥ b - a
                                                        theorem Geodesics.geodesic_arclength_minimizes_energy_locally {n : ℕ} (M : Set (EuclideanSpace ℝ (Fin (n + 1)))) (hM : Hypersurface.IsHypersurface M) (γ σ : ℝ → EuclideanSpace ℝ (Fin (n + 1))) (a b : ℝ) (hab : a < b) (hγ_geo : IsGeodesic M hM γ) (hγ_unit : ∀ (t : ℝ), ‖deriv γ t‖ = 1) (hσ : ContDiff ℝ ⊤ σ) (hσ_in : ∀ (t : ℝ), σ t ∈ M) (hendpoints : σ a = γ a ∧ σ b = γ b) :
                                                        energy σ a b ≥ energy γ a b