/- SamplingOptimisationGeometryBench public-dev reference. Reuses the existing project proof; retain LICENSE and NOTICE. -/ import Mathlib.Analysis.Calculus.Deriv.Slope import Mathlib.Topology.MetricSpace.Basic open Filter Set open scoped Topology namespace AutoSamplingTheory.TechnicalLemmas.Geometry.GeodesicConvexity def IsAlphaGeodesicallyConvex {M : Type*} [MetricSpace M] (isGeodesic : (ℝ → M) → Prop) (F : M → ℝ) (alpha : ℝ) : Prop := ∀ path : ℝ → M, isGeodesic path → ∀ t : ℝ, t ∈ Icc (0 : ℝ) 1 → F (path t) ≤ (1 - t) * F (path 0) + t * F (path 1) - (alpha * t * (1 - t) / 2) * dist (path 0) (path 1) ^ 2 end AutoSamplingTheory.TechnicalLemmas.Geometry.GeodesicConvexity open AutoSamplingTheory.TechnicalLemmas.Geometry.GeodesicConvexity example {M : Type*} [MetricSpace M] {isGeodesic : (ℝ → M) → Prop} {F : M → ℝ} {alpha : ℝ} (hconvex : IsAlphaGeodesicallyConvex isGeodesic F alpha) {path : ℝ → M} (hpath : isGeodesic path) {gradientPairing : ℝ} (hderiv : HasDerivAt (fun t => F (path t)) gradientPairing 0) : F (path 1) ≥ F (path 0) + gradientPairing + alpha / 2 * dist (path 0) (path 1) ^ 2 := by -- Replace this comment with your proof.