From b2e146fb9f84e17fcce2bdf633ebc88beecec379 Mon Sep 17 00:00:00 2001 From: Spring-1211 Date: Fri, 17 Jul 2026 18:04:17 +0800 Subject: [PATCH 1/4] Add Lean quality gates --- .github/workflows/ci.yml | 22 ++++++++++++++++++++ OpenGALibTest/Axioms.lean | 42 +++++++++++++++++++++++++++++++++++++++ lakefile.lean | 5 +++++ scripts/nolints-style.txt | 1 + 4 files changed, 70 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 OpenGALibTest/Axioms.lean create mode 100644 scripts/nolints-style.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..25be8cd5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,22 @@ +name: CI + +on: + push: + branches: [main, feat/hopf-rinow] + pull_request: + branches: [main, feat/hopf-rinow] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: leanprover/lean-action@v1 + with: + build: true + test: true + lint: true + use-mathlib-cache: true + - name: Lint text style + run: lake exe lint-style OpenGALib diff --git a/OpenGALibTest/Axioms.lean b/OpenGALibTest/Axioms.lean new file mode 100644 index 00000000..21e50d4f --- /dev/null +++ b/OpenGALibTest/Axioms.lean @@ -0,0 +1,42 @@ +import OpenGALib.Riemannian.Geodesic.HopfRinow + +/-! +# Axiom regression tests for the Hopf--Rinow facade + +These tests ensure that the five main facade theorems remain free of `sorryAx` and depend only on +the standard axioms used throughout Mathlib. +-/ + +/-- +info: 'Riemannian.Geodesic.hopfRinow' depends on axioms: [propext, Classical.choice, Quot.sound] +-/ +#guard_msgs in +#print axioms Riemannian.Geodesic.hopfRinow + +/-- +info: 'Riemannian.Geodesic.isGeodesicallyComplete_of_complete' depends on axioms: [propext, +Classical.choice, Quot.sound] +-/ +#guard_msgs in +#print axioms Riemannian.Geodesic.isGeodesicallyComplete_of_complete + +/-- +info: 'Riemannian.Geodesic.complete_of_isGeodesicallyComplete' depends on axioms: [propext, +Classical.choice, Quot.sound] +-/ +#guard_msgs in +#print axioms Riemannian.Geodesic.complete_of_isGeodesicallyComplete + +/-- +info: 'Riemannian.Geodesic.complete_of_geodesicallyComplete_at' depends on axioms: [propext, +Classical.choice, Quot.sound] +-/ +#guard_msgs in +#print axioms Riemannian.Geodesic.complete_of_geodesicallyComplete_at + +/-- +info: 'Riemannian.Geodesic.exists_minimizing_geodesic' depends on axioms: [propext, +Classical.choice, Quot.sound] +-/ +#guard_msgs in +#print axioms Riemannian.Geodesic.exists_minimizing_geodesic diff --git a/lakefile.lean b/lakefile.lean index f7aeb1a6..846a4789 100644 --- a/lakefile.lean +++ b/lakefile.lean @@ -2,6 +2,8 @@ import Lake open Lake DSL package OpenGALib where + lintDriver := "batteries/runLinter" + testDriver := "OpenGALibTest" leanOptions := #[ ⟨`pp.unicode.fun, true⟩, ⟨`autoImplicit, false⟩ @@ -15,3 +17,6 @@ require mathlib from git lean_lib OpenGALib where roots := #[`OpenGALib] globs := #[.andSubmodules `OpenGALib] + +lean_lib OpenGALibTest where + globs := #[.submodules `OpenGALibTest] diff --git a/scripts/nolints-style.txt b/scripts/nolints-style.txt new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/scripts/nolints-style.txt @@ -0,0 +1 @@ + From 9a6e969685f861c5cddf047837e7af8b364aa2a2 Mon Sep 17 00:00:00 2001 From: Spring-1211 Date: Fri, 17 Jul 2026 18:04:52 +0800 Subject: [PATCH 2/4] Tighten Lean signatures and linter hygiene --- OpenGALib/Algebraic/BilinearForm/Basic.lean | 6 -- .../MetricGeometry/ProperExhaustion.lean | 4 +- .../Connection/ChartChristoffel.lean | 7 +- .../Connection/ChartChristoffelChange.lean | 32 +++++- .../Connection/ChartChristoffelSmooth.lean | 5 +- OpenGALib/Riemannian/Exponential/C2Ball.lean | 7 +- .../Exponential/CornerRigidity.lean | 8 +- OpenGALib/Riemannian/Exponential/Defs.lean | 26 +++-- .../Riemannian/Exponential/GaussLemma.lean | 19 ++-- .../Exponential/GrowthInduction.lean | 11 ++- .../Riemannian/Exponential/LocalDiffeo.lean | 8 +- .../Riemannian/Exponential/Minimizing.lean | 35 ++++--- .../Exponential/NormalBallEDist.lean | 19 ++-- .../Exponential/ProperAssembly.lean | 7 +- OpenGALib/Riemannian/Exponential/Ray.lean | 7 +- .../Riemannian/Exponential/RayGeodesic.lean | 6 +- OpenGALib/Riemannian/Exponential/RayODE.lean | 9 +- .../Exponential/SegmentUpperBound.lean | 8 +- .../Exponential/StrictDerivative.lean | 14 ++- .../Exponential/StrictDerivativeBall.lean | 8 +- OpenGALib/Riemannian/Geodesic/ChartFlow.lean | 19 +++- .../Riemannian/Geodesic/Completeness.lean | 65 ++++++------ .../Geodesic/CovariantDerivative.lean | 98 ++++++++++++------- .../Riemannian/Geodesic/DataTransfer.lean | 8 +- .../Geodesic/EndpointContinuity.lean | 32 +++--- .../Geodesic/EndpointContinuityGlobal.lean | 16 +-- OpenGALib/Riemannian/Geodesic/Equation.lean | 58 ++++++++++- .../Riemannian/Geodesic/EquationTransfer.lean | 9 +- OpenGALib/Riemannian/Geodesic/Existence.lean | 19 ++-- .../Riemannian/Geodesic/FiberScaling.lean | 19 +++- .../Riemannian/Geodesic/FlowC1Dependence.lean | 6 +- .../Riemannian/Geodesic/FlowC2Dependence.lean | 15 ++- .../Riemannian/Geodesic/FlowDependence.lean | 17 +++- .../Riemannian/Geodesic/FlowGeodesic.lean | 9 +- .../Riemannian/Geodesic/FlowReadback.lean | 8 +- .../Riemannian/Geodesic/Homogeneity.lean | 17 +++- .../Geodesic/HopfRinow/ConstantSpeed.lean | 18 +++- .../Geodesic/HopfRinow/CurveReadback.lean | 14 ++- .../HopfRinow/EVariationLePathELength.lean | 15 +-- .../Geodesic/HopfRinow/GramBound.lean | 9 +- .../Geodesic/HopfRinow/MetricBridge.lean | 17 +++- .../Riemannian/Geodesic/InitialVelocity.lean | 21 +++- .../Geodesic/IntrinsicUniqueness.lean | 8 +- OpenGALib/Riemannian/Geodesic/LinearODE.lean | 29 +++--- .../Riemannian/Geodesic/MaximalInterval.lean | 20 +++- .../Riemannian/Geodesic/SymmetryLemma.lean | 5 +- .../Riemannian/Geodesic/UniformExistence.lean | 8 +- OpenGALib/Riemannian/Geodesic/Uniqueness.lean | 11 ++- .../Geodesic/VariationalEquation.lean | 11 ++- .../Riemannian/Metric/RiemannianMetric.lean | 15 ++- .../TangentBundle/LocallyConstant.lean | 2 + .../TangentBundle/TangentSmooth.lean | 13 ++- .../Riemannian/TensorBundle/MusicalIso.lean | 17 +++- .../TensorBundle/SmoothOrthoFrame.lean | 17 +++- .../SmoothOrthoFrame/ChartBasis.lean | 12 ++- .../SmoothOrthoFrame/Orthonormality.lean | 10 +- .../Util/Chart/FlatChartDerivs.lean | 6 +- 57 files changed, 634 insertions(+), 305 deletions(-) diff --git a/OpenGALib/Algebraic/BilinearForm/Basic.lean b/OpenGALib/Algebraic/BilinearForm/Basic.lean index 62e8dce0..5824cf05 100644 --- a/OpenGALib/Algebraic/BilinearForm/Basic.lean +++ b/OpenGALib/Algebraic/BilinearForm/Basic.lean @@ -75,37 +75,31 @@ theorem inner_smul_right (B : Form π•œ V) (c : π•œ) (v w : V) : simp [inner_def, smul_eq_mul] /-- **Zero in left argument**. -/ -@[simp] theorem inner_zero_left (B : Form π•œ V) (w : V) : inner B 0 w = 0 := by simp [inner_def] /-- **Zero in right argument**. -/ -@[simp] theorem inner_zero_right (B : Form π•œ V) (v : V) : inner B v 0 = 0 := by simp [inner_def] /-- **Negation in left argument**. -/ -@[simp] theorem inner_neg_left (B : Form π•œ V) (v w : V) : inner B (-v) w = -inner B v w := by simp [inner_def, map_neg, LinearMap.neg_apply] /-- **Negation in right argument**. -/ -@[simp] theorem inner_neg_right (B : Form π•œ V) (v w : V) : inner B v (-w) = -inner B v w := by simp [inner_def, map_neg] /-- **Subtraction in left argument**. -/ -@[simp] theorem inner_sub_left (B : Form π•œ V) (v₁ vβ‚‚ w : V) : inner B (v₁ - vβ‚‚) w = inner B v₁ w - inner B vβ‚‚ w := by simp [inner_def, map_sub, LinearMap.sub_apply] /-- **Subtraction in right argument**. -/ -@[simp] theorem inner_sub_right (B : Form π•œ V) (v w₁ wβ‚‚ : V) : inner B v (w₁ - wβ‚‚) = inner B v w₁ - inner B v wβ‚‚ := by simp [inner_def, map_sub] diff --git a/OpenGALib/MetricGeometry/ProperExhaustion.lean b/OpenGALib/MetricGeometry/ProperExhaustion.lean index b0ebfe2d..0f4ca8cc 100644 --- a/OpenGALib/MetricGeometry/ProperExhaustion.lean +++ b/OpenGALib/MetricGeometry/ProperExhaustion.lean @@ -5,7 +5,7 @@ import OpenGALib.Util.Attributes /-! # Properness via divergent compact exhaustions -do Carmo, *Riemannian Geometry*, Ch. 7, Theorem 2.8, b) ⟺ e): a metric space +do Carmo, *Riemannian Geometry*, Ch. 7, Theorem 2.8, b) ↔ e): a metric space has the Heine–Borel property (closed bounded sets are compact, i.e. it is a *proper* space) iff it admits a monotone exhaustion by compact sets `K n` such that every sequence escaping all the `K n` diverges in distance from a fixed @@ -19,7 +19,7 @@ namespace OpenGA variable {Ξ± : Type*} [PseudoMetricSpace Ξ±] -/-- **Math.** do Carmo Ch. 7, Theorem 2.8, b) ⟺ e). A pseudometric space is +/-- **Math.** do Carmo Ch. 7, Theorem 2.8, b) ↔ e). A pseudometric space is **proper** (closed balls β€” equivalently closed bounded sets β€” are compact) iff there is a monotone exhaustion `K 0 βŠ† K 1 βŠ† β‹―`, `⋃ n, K n = univ`, by compact sets such that any sequence `q` with `q n βˆ‰ K n` satisfies diff --git a/OpenGALib/Riemannian/Connection/ChartChristoffel.lean b/OpenGALib/Riemannian/Connection/ChartChristoffel.lean index ace6789a..a4930ecb 100644 --- a/OpenGALib/Riemannian/Connection/ChartChristoffel.lean +++ b/OpenGALib/Riemannian/Connection/ChartChristoffel.lean @@ -1,6 +1,5 @@ import OpenGALib.Riemannian.TensorBundle.MusicalIso -set_option linter.unusedSectionVars false /-! # Chart-coordinate Christoffel symbols @@ -45,12 +44,14 @@ def chartGramOnE (g : RiemannianMetric I M) (Ξ± : M) (i j : Fin (Module.finrank ℝ E)) : E β†’ ℝ := fun y => chartGramMatrix (I := I) g Ξ± ((extChartAt I Ξ±).symm y) i j +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma chartGramOnE_def (g : RiemannianMetric I M) (Ξ± : M) (i j : Fin (Module.finrank ℝ E)) (y : E) : chartGramOnE (I := I) g Ξ± i j y = chartGramMatrix (I := I) g Ξ± ((extChartAt I Ξ±).symm y) i j := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Symmetry of the chart Gram entries pulled back to `E`. -/ lemma chartGramOnE_symm (g : RiemannianMetric I M) (Ξ± : M) @@ -72,6 +73,7 @@ def chartChristoffel (g : RiemannianMetric I M) (Ξ± : M) partialDeriv (E := E) j (chartGramOnE (I := I) g Ξ± l i) y - partialDeriv (E := E) l (chartGramOnE (I := I) g Ξ± i j) y) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma chartChristoffel_def (g : RiemannianMetric I M) (Ξ± : M) (i j k : Fin (Module.finrank ℝ E)) (y : E) : @@ -82,6 +84,7 @@ def chartChristoffel (g : RiemannianMetric I M) (Ξ± : M) partialDeriv (E := E) j (chartGramOnE (I := I) g Ξ± l i) y - partialDeriv (E := E) l (chartGramOnE (I := I) g Ξ± i j) y) := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Symmetry of the Christoffel symbol** in the lower indices β€” the torsion-free property of the Levi-Civita connection, read off the coordinate formula. -/ @@ -104,6 +107,7 @@ theorem chartChristoffel_symm rw [hsym]] ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Christoffel contraction with the Gram matrix.** Contracting the Christoffel symbol `Γᡐ_{ki}` against the Gram matrix `G_{am}` recovers half the metric-derivative combination: `Ξ£_m G_{am} Γᡐ_{ki} = Β½(βˆ‚_k G_{ai} + βˆ‚_i G_{ak} βˆ’ @@ -156,6 +160,7 @@ lemma chartGram_christoffel_contraction (g : RiemannianMetric I M) (Ξ± : M) congr 1 simp only [ite_mul, one_mul, zero_mul, Finset.sum_ite_eq, Finset.mem_univ, if_true] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Metric-compatibility in chart components.** The derivative of the Gram matrix is recovered from the Christoffel symbols: `βˆ‚_k G_{ij} = Ξ£_m (G_{mj} Γᡐ_{ki} + G_{im} Γᡐ_{kj})`. This is the coordinate form diff --git a/OpenGALib/Riemannian/Connection/ChartChristoffelChange.lean b/OpenGALib/Riemannian/Connection/ChartChristoffelChange.lean index fc6e5abe..7ba01767 100644 --- a/OpenGALib/Riemannian/Connection/ChartChristoffelChange.lean +++ b/OpenGALib/Riemannian/Connection/ChartChristoffelChange.lean @@ -41,7 +41,6 @@ Reference: do Carmo, *Riemannian Geometry*, Ch. 2 (the connection in coordinates Lee, *Riemannian Manifolds*, Ch. 5 (transformation law for the Christoffel symbols). -/ -set_option linter.unusedSectionVars false noncomputable section @@ -53,7 +52,7 @@ namespace Riemannian open Riemannian.Tensor variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] @@ -63,12 +62,14 @@ The coordinate functional `Geodesic.chartCoordFunctional` and the directional derivative expansion `fderiv_apply_eq_sum_partialDeriv` are provided by `Geodesic/CovariantDerivative.lean`. -/ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart coordinates of a basis vector are Kronecker deltas. -/ lemma chartCoord_finBasis (a b : Fin (Module.finrank ℝ E)) : Geodesic.chartCoord (E := E) a ((Module.finBasis ℝ E) b) = if b = a then (1 : ℝ) else 0 := by rw [Geodesic.chartCoord_def, Module.Basis.repr_self, Finsupp.single_apply] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Expansion of a continuous linear map through the chart basis, in coordinates: `(f v)^a = Ξ£_k v^k (f e_k)^a`. -/ lemma chartCoord_clm_eq_sum (f : E β†’L[ℝ] E) (a : Fin (Module.finrank ℝ E)) (v : E) : @@ -97,6 +98,7 @@ moving foot. The argument order matches `tangentCoordChange I Ξ² Ξ±`. -/ def chartTransition (Ξ² Ξ± : M) : E β†’ E := extChartAt I Ξ± ∘ (extChartAt I Ξ²).symm +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in @[simp] lemma chartTransition_def (Ξ² Ξ± : M) (y : E) : chartTransition (I := I) Ξ² Ξ± y = extChartAt I Ξ± ((extChartAt I Ξ²).symm y) := rfl @@ -105,6 +107,7 @@ coordinates: the source of the transition `chartTransition Ξ² Ξ±`. -/ def chartTransitionSource (Ξ² Ξ± : M) : Set E := ((extChartAt I Ξ²).symm.trans (extChartAt I Ξ±)).source +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in lemma chartTransitionSource_eq (Ξ² Ξ± : M) : chartTransitionSource (I := I) (M := M) Ξ² Ξ± = (extChartAt I Ξ²).target @@ -112,6 +115,7 @@ lemma chartTransitionSource_eq (Ξ² Ξ± : M) : unfold chartTransitionSource rw [PartialEquiv.trans_source, PartialEquiv.symm_source, extChartAt_source] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in /-- **Math.** The chart overlap is open in `Ξ²`-chart coordinates (boundaryless). -/ lemma isOpen_chartTransitionSource (Ξ² Ξ± : M) : IsOpen (chartTransitionSource (I := I) (M := M) Ξ² Ξ±) := by @@ -119,6 +123,7 @@ lemma isOpen_chartTransitionSource (Ξ² Ξ± : M) : exact ContinuousOn.isOpen_inter_preimage (continuousOn_extChartAt_symm Ξ²) (isOpen_extChartAt_target Ξ²) (chartAt H Ξ±).open_source +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in /-- **Math.** On the overlap, the foot `(extChartAt I Ξ²).symm y` lies in the chart source at `Ξ²`. -/ lemma extChartAt_symm_mem_chartAt_source_left {Ξ² Ξ± : M} {y : E} @@ -128,6 +133,7 @@ lemma extChartAt_symm_mem_chartAt_source_left {Ξ² Ξ± : M} {y : E} have := (extChartAt I Ξ²).map_target hy.1 rwa [extChartAt_source] at this +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in /-- **Math.** On the overlap, the foot `(extChartAt I Ξ²).symm y` lies in the chart source at `Ξ±`. -/ lemma extChartAt_symm_mem_chartAt_source_right {Ξ² Ξ± : M} {y : E} @@ -136,6 +142,7 @@ lemma extChartAt_symm_mem_chartAt_source_right {Ξ² Ξ± : M} {y : E} rw [chartTransitionSource_eq] at hy exact hy.2 +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in /-- **Math.** On the overlap, the `Ξ²`-chart reading of the foot is `y` itself. -/ lemma extChartAt_extChartAt_symm_of_mem {Ξ² Ξ± : M} {y : E} (hy : y ∈ chartTransitionSource (I := I) (M := M) Ξ² Ξ±) : @@ -143,6 +150,7 @@ lemma extChartAt_extChartAt_symm_of_mem {Ξ² Ξ± : M} {y : E} rw [chartTransitionSource_eq] at hy exact (extChartAt I Ξ²).right_inv hy.1 +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in /-- **Math.** On the overlap, the transition image lies in the `Ξ±`-chart target. -/ lemma chartTransition_mem_target {Ξ² Ξ± : M} {y : E} (hy : y ∈ chartTransitionSource (I := I) (M := M) Ξ² Ξ±) : @@ -151,6 +159,7 @@ lemma chartTransition_mem_target {Ξ² Ξ± : M} {y : E} rw [extChartAt_source] exact extChartAt_symm_mem_chartAt_source_right (I := I) hy +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in /-- **Math.** On the overlap, pulling the transition image back through the `Ξ±`-chart recovers the common foot. -/ lemma extChartAt_symm_chartTransition {Ξ² Ξ± : M} {y : E} @@ -161,6 +170,7 @@ lemma extChartAt_symm_chartTransition {Ξ² Ξ± : M} {y : E} rw [extChartAt_source] exact extChartAt_symm_mem_chartAt_source_right (I := I) hy +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in /-- **Math.** Entry point from a manifold point: if `x` lies in both chart sources, its `Ξ²`-chart image lies in the overlap. -/ lemma extChartAt_mem_chartTransitionSource {Ξ² Ξ± : M} {x : M} @@ -172,6 +182,7 @@ lemma extChartAt_mem_chartTransitionSource {Ξ² Ξ± : M} {x : M} rw [mem_preimage, (extChartAt I Ξ²).left_inv hxΞ²'] exact hxΞ± +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in /-- **Math.** At the `Ξ²`-chart image of a common point `x`, the transition reads off the `Ξ±`-chart image of `x`. -/ lemma chartTransition_extChartAt {Ξ² Ξ± : M} {x : M} @@ -180,12 +191,14 @@ lemma chartTransition_extChartAt {Ξ² Ξ± : M} {x : M} have hxΞ²' : x ∈ (extChartAt I Ξ²).source := by rw [extChartAt_source]; exact hxΞ² rw [chartTransition_def, (extChartAt I Ξ²).left_inv hxΞ²'] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The transition map is `C^∞` on the overlap. -/ lemma contDiffOn_chartTransition (Ξ² Ξ± : M) : ContDiffOn ℝ ∞ (chartTransition (I := I) Ξ² Ξ±) (chartTransitionSource (I := I) (M := M) Ξ² Ξ±) := contDiffOn_ext_coord_change (I := I) Ξ± Ξ² +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The transition map is `C^∞` at each point of the (open) overlap. -/ lemma contDiffAt_chartTransition {Ξ² Ξ± : M} {y : E} (hy : y ∈ chartTransitionSource (I := I) (M := M) Ξ² Ξ±) : @@ -193,6 +206,7 @@ lemma contDiffAt_chartTransition {Ξ² Ξ± : M} {y : E} (contDiffOn_chartTransition (I := I) Ξ² Ξ±).contDiffAt ((isOpen_chartTransitionSource (I := I) Ξ² Ξ±).mem_nhds hy) +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** On the overlap, the transition map differentiates to the tangent coordinate change at the moving foot. -/ lemma hasFDerivAt_chartTransition {Ξ² Ξ± : M} {y : E} @@ -208,6 +222,7 @@ lemma hasFDerivAt_chartTransition {Ξ² Ξ± : M} {y : E} rw [extChartAt_extChartAt_symm_of_mem (I := I) hy] at hw exact hasFDerivWithinAt_univ.mp hw +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The full-space `fderiv` of the transition on the overlap is the tangent coordinate change at the moving foot. -/ lemma fderiv_chartTransition {Ξ² Ξ± : M} {y : E} @@ -223,6 +238,7 @@ def transitionDeriv (Ξ² Ξ± : M) (a i : Fin (Module.finrank ℝ E)) (y : E) : ℝ Geodesic.chartCoord (E := E) a (fderiv ℝ (chartTransition (I := I) Ξ² Ξ±) y ((Module.finBasis ℝ E) i)) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in @[simp] lemma transitionDeriv_def (Ξ² Ξ± : M) (a i : Fin (Module.finrank ℝ E)) (y : E) : transitionDeriv (I := I) Ξ² Ξ± a i y = Geodesic.chartCoord (E := E) a @@ -235,6 +251,7 @@ def transitionSndDeriv (Ξ² Ξ± : M) (a k i : Fin (Module.finrank ℝ E)) (y : E) (fderiv ℝ (fderiv ℝ (chartTransition (I := I) Ξ² Ξ±)) y ((Module.finBasis ℝ E) k) ((Module.finBasis ℝ E) i)) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in @[simp] lemma transitionSndDeriv_def (Ξ² Ξ± : M) (a k i : Fin (Module.finrank ℝ E)) (y : E) : transitionSndDeriv (I := I) Ξ² Ξ± a k i y @@ -242,6 +259,7 @@ def transitionSndDeriv (Ξ² Ξ± : M) (a k i : Fin (Module.finrank ℝ E)) (y : E) (fderiv ℝ (fderiv ℝ (chartTransition (I := I) Ξ² Ξ±)) y ((Module.finBasis ℝ E) k) ((Module.finBasis ℝ E) i)) := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Schwarz symmetry** of the transition second derivative in the two differentiation directions: `βˆ‚Β²x^a/βˆ‚y^kβˆ‚y^i = βˆ‚Β²x^a/βˆ‚y^iβˆ‚y^k` on the overlap. -/ lemma transitionSndDeriv_symm {Ξ² Ξ± : M} {y : E} @@ -255,6 +273,7 @@ lemma transitionSndDeriv_symm {Ξ² Ξ± : M} {y : E} exact WithTop.coe_le_coe.2 le_top rw [transitionSndDeriv_def, transitionSndDeriv_def, hsymm.eq] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The moving transition derivative `y ↦ DΟ„(y)` is differentiable on the overlap (as a map into continuous linear maps), with derivative the second derivative of the transition. -/ @@ -267,6 +286,7 @@ lemma hasFDerivAt_fderiv_chartTransition {Ξ² Ξ± : M} {y : E} exact WithTop.coe_le_coe.2 le_top exact (h1.differentiableAt one_ne_zero).hasFDerivAt +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The matrix-entry function `A^a_i` is differentiable on the overlap, with partial derivatives the second-derivative coefficients `B^a_{ki}`. -/ lemma hasFDerivAt_transitionDeriv {Ξ² Ξ± : M} {y : E} @@ -289,6 +309,7 @@ section GramChange variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The Gram change law through the transition map** (`E`-level form of `chartGramMatrix_change`): on the overlap, the `Ξ²`-chart Gram entry is the `Ξ±`-chart Gram entry at the transition image, conjugated by the transition @@ -310,6 +331,7 @@ theorem chartGramOnE_chartTransition (g : RiemannianMetric I M) (Ξ± Ξ² : M) {y : transitionDeriv_def, transitionDeriv_def, fderiv_chartTransition (I := I) hy] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Derivative of the Gram change law** (the first-order layer): on the overlap, `βˆ‚_k G^Ξ²_{ij} = Ξ£_{ab} [(Ξ£_c βˆ‚_c G^Ξ±_{ab}(Ο„ y) A^c_k) A^a_i A^b_j @@ -411,6 +433,7 @@ section Contraction variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Cancellation of the (invertible) transition derivative: a covector that annihilates every column `A e_a` of the transition derivative vanishes. -/ lemma eq_zero_of_forall_sum_mul_transitionDeriv {Ξ² Ξ± : M} {y : E} @@ -467,6 +490,7 @@ lemma eq_zero_of_forall_sum_mul_transitionDeriv {Ξ² Ξ± : M} {y : E} simp only [hite, mul_ite, mul_one, mul_zero] at hv2 simpa [Fintype.sum_ite_eq] using hv2 +omit [I.Boundaryless] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Cancellation of the (invertible) Gram matrix: a vector annihilated by every row of `G^Ξ±` at a foot in the chart source vanishes. -/ lemma eq_zero_of_forall_sum_chartGramOnE_mul (g : RiemannianMetric I M) {Ξ± : M} @@ -511,6 +535,7 @@ lemma eq_zero_of_forall_sum_chartGramOnE_mul (g : RiemannianMetric I M) {Ξ± : M} simp only [step, h] simp +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The transported contraction identity** β€” the heart of the classical computation. Substituting the differentiated Gram change law into the `Ξ²`-contraction identity `Ξ£_m G^Ξ²_{am} Ξ“^{Ξ²,m}_{ki} = Β½(βˆ‚_k G^Ξ²_{ai} + βˆ‚_i G^Ξ²_{ak} @@ -662,6 +687,7 @@ theorem sum_gram_mul_christoffel_transition (g : RiemannianMetric I M) (fun p c d => chartGram_christoffel_contraction (I := I) g Ξ± p c d (chartTransition (I := I) Ξ² Ξ± y) hfootΞ±) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Direct expansion of the same contraction through the Gram change law: `Ξ£_m G^Ξ²_{am} Ξ“^{Ξ²,m}_{ki} = Ξ£_p A^p_a Ξ£_q G^Ξ±_{pq}(Ο„ y) (Ξ£_m A^q_m Ξ“^{Ξ²,m}_{ki})`. -/ theorem sum_gram_mul_christoffel_expand (g : RiemannianMetric I M) @@ -703,6 +729,7 @@ theorem sum_gram_mul_christoffel_expand (g : RiemannianMetric I M) refine Finset.sum_congr rfl fun q _ => Finset.sum_congr rfl fun m _ => ?_ ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Change-of-chart law for the chart Christoffel symbols, index form.** On the overlap, `Ξ£_m A^q_m Ξ“^{Ξ²,m}_{ki} = Ξ£_{cd} Ξ“^{Ξ±,q}_{cd}(Ο„ y) A^c_k A^d_i + B^q_{ki}` β€” the classical inhomogeneous transformation law, with the second @@ -780,6 +807,7 @@ section Bilinear variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Change-of-chart transformation law for the Christoffel contraction** (the toll-gate identity for chart-independence of the geodesic equation, inbox I-0100): at a common foot `x` of the charts at `Ξ²` and `Ξ±`, with diff --git a/OpenGALib/Riemannian/Connection/ChartChristoffelSmooth.lean b/OpenGALib/Riemannian/Connection/ChartChristoffelSmooth.lean index 3d386916..8613d1c5 100644 --- a/OpenGALib/Riemannian/Connection/ChartChristoffelSmooth.lean +++ b/OpenGALib/Riemannian/Connection/ChartChristoffelSmooth.lean @@ -1,6 +1,5 @@ import OpenGALib.Riemannian.Connection.ChartChristoffel -set_option linter.unusedSectionVars false /-! # Smoothness of the chart Christoffel symbols @@ -53,6 +52,7 @@ lemma extChartAt_target_subset_interior_of_boundaryless [I.Boundaryless] (Ξ± : M /-! ## Gram / inverse-Gram pulled-back smoothness -/ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart Gram entry pulled back to `E` is `C^∞` on the chart target. -/ lemma chartGramOnE_contDiffOn @@ -86,12 +86,14 @@ def chartInvGramOnE (g : RiemannianMetric I M) (Ξ± : M) (i j : Fin (Module.finrank ℝ E)) : E β†’ ℝ := fun y => chartInvGramMatrix (I := I) g Ξ± ((extChartAt I Ξ±).symm y) i j +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma chartInvGramOnE_def (g : RiemannianMetric I M) (Ξ± : M) (i j : Fin (Module.finrank ℝ E)) (y : E) : chartInvGramOnE (I := I) g Ξ± i j y = chartInvGramMatrix (I := I) g Ξ± ((extChartAt I Ξ±).symm y) i j := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The pulled-back inverse Gram entry is `C^∞` on the chart target. -/ lemma chartInvGramOnE_contDiffOn (g : RiemannianMetric I M) (Ξ± : M) @@ -121,6 +123,7 @@ lemma chartInvGramOnE_contDiffOn /-! ## Christoffel smoothness -/ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Smoothness of `chartChristoffel`.** The chart Christoffel symbol is `C^∞` on the interior of the chart target. -/ theorem chartChristoffel_contDiffOn_interior diff --git a/OpenGALib/Riemannian/Exponential/C2Ball.lean b/OpenGALib/Riemannian/Exponential/C2Ball.lean index 8be5a1e5..dde66cdc 100644 --- a/OpenGALib/Riemannian/Exponential/C2Ball.lean +++ b/OpenGALib/Riemannian/Exponential/C2Ball.lean @@ -1,7 +1,6 @@ import OpenGALib.Riemannian.Geodesic.FlowC2Dependence import OpenGALib.Riemannian.Exponential.Ray -set_option linter.unusedSectionVars false set_option maxSynthPendingDepth 3 /-! @@ -43,12 +42,12 @@ namespace Exponential open Riemannian.Geodesic Riemannian.FlowDependence variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] -set_option maxHeartbeats 1000000 in +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **`exp_p` is `CΒ²` on a ball around the origin** (do Carmo Ch. 3, Prop. 2.9, second-order regularity; the analytic input for the Gauss lemma 3.5). There is `ρ > 0` such that every `w` with `β€–wβ€– < ρ` lies in the exponential domain, diff --git a/OpenGALib/Riemannian/Exponential/CornerRigidity.lean b/OpenGALib/Riemannian/Exponential/CornerRigidity.lean index fd9d60c4..fbb20ac5 100644 --- a/OpenGALib/Riemannian/Exponential/CornerRigidity.lean +++ b/OpenGALib/Riemannian/Exponential/CornerRigidity.lean @@ -27,7 +27,6 @@ noncomputable section open Bundle Manifold Set Filter Metric open scoped Manifold Topology ContDiff -set_option linter.unusedSectionVars false namespace Riemannian @@ -36,13 +35,14 @@ namespace Exponential open Riemannian.Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] variable {M' : Type*} [MetricSpace M'] [ChartedSpace H M'] [IsManifold I ∞ M'] variable [T2Space (TangentBundle I M')] +omit [InnerProductSpace ℝ E] in /-- **Math.** **Corner rigidity** (do Carmo Ch. 3, Cor. 3.9, equality case, as used in the Hopf–Rinow growth induction): if `u₁, uβ‚‚ ∈ T_xM` are `g_x`-unit vectors and the broken curve through `x` realizes the distance @@ -118,7 +118,7 @@ theorem eq_neg_of_forall_edist_expMap_eq (g : RiemannianMetric I M') have hs2 : 2 ≀ Real.sqrt (chartMetricInner (I := I) g x (extChartAt I x x) (uβ‚‚ - u₁) (uβ‚‚ - u₁)) := by by_contra hlt - push_neg at hlt + push Not at hlt rcases eq_or_lt_of_le (Real.sqrt_nonneg (chartMetricInner (I := I) g x (extChartAt I x x) (uβ‚‚ - u₁) (uβ‚‚ - u₁))) with heq | hpos diff --git a/OpenGALib/Riemannian/Exponential/Defs.lean b/OpenGALib/Riemannian/Exponential/Defs.lean index d71f9034..414a2bf1 100644 --- a/OpenGALib/Riemannian/Exponential/Defs.lean +++ b/OpenGALib/Riemannian/Exponential/Defs.lean @@ -4,7 +4,6 @@ import OpenGALib.Riemannian.Geodesic.MaximalInterval import OpenGALib.Riemannian.Geodesic.Uniqueness import Mathlib.Topology.Connected.Clopen -set_option linter.unusedSectionVars false /-! # The exponential map of a smooth Riemannian metric @@ -57,7 +56,7 @@ namespace Riemannian namespace Exponential variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] @@ -70,7 +69,8 @@ the constant junk value `p` of `maximalGeodesic`. -/ def expMap (g : RiemannianMetric I M) (p : M) (v : TangentSpace I p) : M := maximalGeodesic (I := I) g p v 1 -@[simp] lemma expMap_def (g : RiemannianMetric I M) (p : M) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in +lemma expMap_def (g : RiemannianMetric I M) (p : M) (v : TangentSpace I p) : expMap (I := I) g p v = maximalGeodesic (I := I) g p v 1 := rfl @@ -81,6 +81,7 @@ geodesic-flow value; outside, it reverts to `p`. -/ def expDomain (g : RiemannianMetric I M) (p : M) : Set (TangentSpace I p) := {v | (1 : ℝ) ∈ maximalGeodesicInterval (I := I) g p v} +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma mem_expDomain_iff {g : RiemannianMetric I M} {p : M} {v : TangentSpace I p} : v ∈ expDomain (I := I) g p ↔ @@ -88,8 +89,9 @@ def expDomain (g : RiemannianMetric I M) (p : M) : Set (TangentSpace I p) := section StationaryWitness -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] +omit [I.Boundaryless] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** For the zero initial velocity, the constant geodesic at `p` is a `MaximalGeodesicWitness` at every time, witnessed on the preconnected set `Set.univ`. -/ @@ -106,11 +108,13 @@ theorem maximalGeodesicWitness_zero_all_times geodesicVectorFieldChart_zero_section (I := I) g p exact (isMIntegralCurve_const hvf_zero).isMIntegralCurveOn Set.univ +omit [I.Boundaryless] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The zero vector is always in the natural domain of `expMap g p`. -/ theorem zero_mem_expDomain (g : RiemannianMetric I M) (p : M) : (0 : TangentSpace I p) ∈ expDomain (I := I) g p := maximalGeodesicWitness_zero_all_times (I := I) g p 1 +omit [I.Boundaryless] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The natural domain of `expMap g p` is nonempty (it always contains `0`). -/ theorem expDomain_nonempty (g : RiemannianMetric I M) (p : M) : (expDomain (I := I) g p).Nonempty := @@ -120,8 +124,9 @@ end StationaryWitness section JunkValue -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** Outside the natural domain, `expMap` returns the junk value `p`. -/ theorem expMap_of_not_mem_expDomain {g : RiemannianMetric I M} {p : M} {v : TangentSpace I p} @@ -134,8 +139,9 @@ end JunkValue section ExpMapZeroWitnessLevel -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] +omit [I.Boundaryless] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chosen geodesic witness curve for `(p, 0)` at time `1` starts at `p`. (This is `maximalGeodesicChosenCurve_spec` paired with the `start_eq` lemma.) -/ @@ -152,9 +158,10 @@ end ExpMapZeroWitnessLevel section ZeroVelocityPropagation -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [I.Boundaryless] [T2Space (TangentBundle I M)] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The constant lift `fun _ : ℝ => ⟨p, 0⟩` is a global integral curve of `geodesicVectorFieldChart g p`, since the vector field vanishes at the zero section over the chart basepoint. -/ @@ -164,6 +171,7 @@ private lemma isMIntegralCurve_const_zero_section (geodesicVectorFieldChart (I := I) g p) := isMIntegralCurve_const (geodesicVectorFieldChart_zero_section (I := I) g p) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Zero-velocity propagation.** If `f : ℝ β†’ TangentBundle I M` is an integral curve of `geodesicVectorFieldChart g p` on a preconnected open set `J βˆ‹ 0` and satisfies the initial condition `f 0 = ⟨p, 0⟩`, then @@ -247,9 +255,10 @@ end ZeroVelocityPropagation section ExpMapZero -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** For any witness `(Ξ³, J)` of a `MaximalGeodesicWitness` with zero initial velocity, the witness curve is identically `p` on `J`. -/ theorem maximalGeodesicWitness_zero_curve_eq_p @@ -267,6 +276,7 @@ theorem maximalGeodesicWitness_zero_curve_eq_p rw [hf_eq] at this exact this.symm +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **`expMap g p 0 = p`** β€” the value of the exponential map at the zero vector is the base point itself. -/ @[simp] theorem expMap_zero diff --git a/OpenGALib/Riemannian/Exponential/GaussLemma.lean b/OpenGALib/Riemannian/Exponential/GaussLemma.lean index 70e3b8a6..dbca7c02 100644 --- a/OpenGALib/Riemannian/Exponential/GaussLemma.lean +++ b/OpenGALib/Riemannian/Exponential/GaussLemma.lean @@ -3,7 +3,6 @@ import OpenGALib.Riemannian.Geodesic.SymmetryLemma import OpenGALib.Riemannian.Geodesic.CovariantDerivative import OpenGALib.Riemannian.Geodesic.HopfRinow.MetricBridge -set_option linter.unusedSectionVars false set_option maxSynthPendingDepth 3 /-! @@ -44,22 +43,25 @@ namespace Riemannian section ChartMetricInnerAlgebra variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart Gram inner product vanishes when its first vector slot is zero. -/ theorem chartMetricInner_zero_left (g : RiemannianMetric I M) (Ξ± : M) (y b : E) : chartMetricInner (I := I) g Ξ± y 0 b = 0 := by simp [chartMetricInner_def] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart Gram inner product vanishes when its second vector slot is zero. -/ theorem chartMetricInner_zero_right (g : RiemannianMetric I M) (Ξ± : M) (y a : E) : chartMetricInner (I := I) g Ξ± y a 0 = 0 := by simp [chartMetricInner_def] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart Gram inner product is homogeneous in its first vector slot. -/ theorem chartMetricInner_smul_left (g : RiemannianMetric I M) (Ξ± : M) (y : E) @@ -70,6 +72,7 @@ theorem chartMetricInner_smul_left (g : RiemannianMetric I M) (Ξ± : M) (y : E) refine Finset.sum_congr rfl fun i _ => Finset.sum_congr rfl fun j _ => ?_ ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart Gram inner product is homogeneous in its second vector slot. -/ theorem chartMetricInner_smul_right (g : RiemannianMetric I M) (Ξ± : M) (y : E) @@ -80,6 +83,7 @@ theorem chartMetricInner_smul_right (g : RiemannianMetric I M) (Ξ± : M) (y : E) refine Finset.sum_congr rfl fun i _ => Finset.sum_congr rfl fun j _ => ?_ ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart Gram inner product is symmetric (the Gram matrix is, `chartGramOnE_symm`). -/ theorem chartMetricInner_symm (g : RiemannianMetric I M) (Ξ± : M) (y a b : E) : @@ -89,6 +93,7 @@ theorem chartMetricInner_symm (g : RiemannianMetric I M) (Ξ± : M) (y a b : E) : rw [chartGramOnE_symm (I := I) g Ξ±] ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The derivative at `s = 0` of the quadratic form `s ↦ ⟨a + sΒ·d, a + sΒ·d⟩_y` is `⟨a, d⟩_y + ⟨d, a⟩_y`. This computes `βˆ‚_s |v + s w|Β²` in the Gauss-lemma argument. -/ @@ -127,17 +132,17 @@ namespace Exponential open Riemannian.Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] -set_option maxHeartbeats 1600000 in +omit [T2Space (TangentBundle I M)] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The Gauss-lemma surface computation** (do Carmo Ch. 3, Lemma 3.5, the analytic core). Let `f : E β†’ E` be a `CΒ²` map on `B_ρ(0)` β€” think of the chart reading `w ↦ Ο†_p(exp_p w)` β€” whose values lie in the chart target, with `f(0) = Ο†_p(p)`, `(df)_0 = id`, and whose ray velocities satisfy the chart -geodesic ODE `VΜ‡ = βˆ’Ξ“_p(V,V)(f)` (the package of `exists_expMap_ray_ode_ball`). +geodesic ODE `V' = βˆ’Ξ“_p(V,V)(f)` (the package of `exists_expMap_ray_ode_ball`). Then for `β€–vβ€– < ρ` and any `w`, `⟨(df)_v(v), (df)_v(w)⟩_{f(v)} = ⟨v, w⟩_{Ο†_p(p)}` @@ -522,6 +527,7 @@ theorem gauss_surface_computation (g : RiemannianMetric I M) (p : M) rw [chartMetricInner_symm (I := I) g p (f v) (fderiv ℝ f v v) (fderiv ℝ f v w)] exact h10 +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The Gauss lemma** (do Carmo Ch. 3, Lemma 3.5). There is `ρ > 0` such that the ball `B_ρ(0) βŠ‚ T_pM` lies in the exponential domain, its image stays in the chart at `p`, and for every `v` with `β€–vβ€– < ρ` and every `w`, @@ -581,6 +587,7 @@ theorem exists_gauss_lemma_ball (g : RiemannianMetric I M) (p : M) : rw [(extChartAt I p).left_inv hmem, TangentBundle.trivializationAt_baseSet] exact hsrc w' hw' +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Radial lower bound from the Gauss lemma** (do Carmo Ch. 3, the inequality driving Prop. 3.6). On the Gauss ball, for every `v` with `β€–vβ€– < ρ` and every direction `ΞΎ`, diff --git a/OpenGALib/Riemannian/Exponential/GrowthInduction.lean b/OpenGALib/Riemannian/Exponential/GrowthInduction.lean index 1302e84c..119edeaa 100644 --- a/OpenGALib/Riemannian/Exponential/GrowthInduction.lean +++ b/OpenGALib/Riemannian/Exponential/GrowthInduction.lean @@ -45,7 +45,6 @@ noncomputable section open Bundle Manifold Set Filter Metric open scoped Manifold Topology ContDiff -set_option linter.unusedSectionVars false namespace Riemannian @@ -54,15 +53,16 @@ namespace Exponential open Riemannian.Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] variable {M' : Type*} [MetricSpace M'] [ChartedSpace H M'] [IsManifold I ∞ M'] variable [T2Space (TangentBundle I M')] /-! ## Helper lemmas: initial speed, unit-speed Lipschitz bound, uniqueness -/ +omit [T2Space (TangentBundle I M')] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The squared speed of a curve satisfying the geodesic equation at time `Ο„`, expressed through any chart velocity at the foot: if the chart-`Ξ³ Ο„` reading of `Ξ³` has derivative `u` at `Ο„`, then @@ -79,6 +79,7 @@ theorem speedSq_eq_chartMetricInner_of_hasDerivAt {g : RiemannianMetric I M'} rw [h, hderiv] rfl +omit [T2Space (TangentBundle I M')] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** A continuous global geodesic with unit initial chart speed is `1`-Lipschitz: `d(Ξ³ a, Ξ³ b) ≀ b - a` (do Carmo Ch. 7, proof of Thm 2.8). -/ theorem IsGeodesic.dist_le_of_speedSq_one (g : RiemannianMetric I M') @@ -97,6 +98,7 @@ theorem IsGeodesic.dist_le_of_speedSq_one (g : RiemannianMetric I M') rw [hsp, Real.sqrt_one, one_mul] at h exact h +omit [T2Space (TangentBundle I M')] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Uniqueness of intrinsic geodesics, `HasDerivAt` form: two continuous geodesics on an open preconnected time set which share their position at `tβ‚€` and their chart-`Ξ²` velocity (as an actual derivative) @@ -120,6 +122,7 @@ theorem IsGeodesicOn.eqOn_of_hasDerivAt_chartReading /-! ## The sup-pushing step -/ +omit [InnerProductSpace ℝ E] in /-- **Math.** **The growth step of the Hopf–Rinow induction** (do Carmo Ch. 7, proof of Theorem 2.8, the interior case): let `Ξ³` be a continuous unit-speed global geodesic with `d(Ξ³ 0, Ξ³ s) = s` and `d(Ξ³ s, q) = r - s` for all @@ -463,6 +466,7 @@ theorem exists_add_mem_of_lt (g : RiemannianMetric I M') /-! ## The growth induction -/ +omit [InnerProductSpace ℝ E] in /-- **Math.** **Minimizing geodesics out of a geodesically complete point** (do Carmo Ch. 7, Theorem 2.8, a) ⟹ f)): if every tangent vector at `p` generates a continuous geodesic defined on all of `ℝ`, then for every `q` @@ -686,6 +690,7 @@ theorem exists_minimizing_geodesic_of_forall_geodesic (g : RiemannianMetric I M' IsGeodesic.dist_le_of_speedSq_one (I := I) g hg hΞ³geo hΞ³c hspeed hab, fun s hs => hupA s (by rw [hsβ‚€eq]; exact hs)⟩ +omit [InnerProductSpace ℝ E] in /-- **Math.** do Carmo Ch. 7, Theorem 2.8, f), unit-interval form: under the hypotheses of `exists_minimizing_geodesic_of_forall_geodesic`, the two points are joined by a geodesic segment `Ξ³ : [0,1] β†’ M` parametrized proportionally diff --git a/OpenGALib/Riemannian/Exponential/LocalDiffeo.lean b/OpenGALib/Riemannian/Exponential/LocalDiffeo.lean index 0ccab293..8be56d49 100644 --- a/OpenGALib/Riemannian/Exponential/LocalDiffeo.lean +++ b/OpenGALib/Riemannian/Exponential/LocalDiffeo.lean @@ -2,7 +2,6 @@ import Mathlib.Analysis.Calculus.InverseFunctionTheorem.ContDiff import OpenGALib.Riemannian.Exponential.StrictDerivative import OpenGALib.Riemannian.Exponential.StrictDerivativeBall -set_option linter.unusedSectionVars false /-! # The exponential map is a `CΒΉ` local diffeomorphism @@ -45,11 +44,12 @@ namespace Exponential open Riemannian.Geodesic Riemannian.FlowDependence variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The derivative of `exp_p` is invertible at every point of a ball around the origin** (do Carmo Ch. 3, Prop. 2.9, invertibility clause). There is `ρ > 0` such that every `w` with `β€–wβ€– < ρ` lies in the exponential domain, @@ -118,7 +118,7 @@ theorem exists_hasStrictFDerivAt_equiv_extChartAt_expMap_ball rw [hcoe] exact hstrict' vβ‚€ (mem_ball_zero_iff.mpr hv₀ρ) -set_option maxHeartbeats 800000 in +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **`exp_p` is a `CΒΉ` diffeomorphism of a ball around `0 ∈ T_pM` onto an open subset of `M`** (do Carmo Ch. 3, Prop. 2.9, at `CΒΉ` regularity). There is `Ξ΅ > 0` such that: diff --git a/OpenGALib/Riemannian/Exponential/Minimizing.lean b/OpenGALib/Riemannian/Exponential/Minimizing.lean index 01e1ed98..7766f67e 100644 --- a/OpenGALib/Riemannian/Exponential/Minimizing.lean +++ b/OpenGALib/Riemannian/Exponential/Minimizing.lean @@ -3,7 +3,6 @@ import OpenGALib.Riemannian.Exponential.StrictDerivativeBall import OpenGALib.Riemannian.Exponential.LocalDiffeo import Mathlib.MeasureTheory.Integral.IntervalIntegral.FundThmCalculus -set_option linter.unusedSectionVars false set_option maxSynthPendingDepth 3 /-! @@ -27,10 +26,10 @@ everywhere with and the radial lower bound from the Gauss lemma (`exists_gauss_radial_lower_bound_ball`, do Carmo's -`⟨v, ξ⟩_pΒ² ≀ ⟨v, v⟩_p Β· |(d exp_p)_v ΞΎ|Β²`) gives `|r_Ξ΄'(t)| ≀ |Δ‹(t)|_g` +`⟨v, ξ⟩_pΒ² ≀ ⟨v, v⟩_p Β· |(d exp_p)_v ΞΎ|Β²`) gives `|r_Ξ΄'(t)| ≀ |c'(t)|_g` *at every* `t` β€” including zeros of `w`. The fundamental theorem of calculus and monotonicity of the interval integral yield -`r_Ξ΄(b) - r_Ξ΄(a) ≀ ∫ |Δ‹|_g`, and `Ξ΄ β†’ 0⁺` recovers the radius comparison +`r_Ξ΄(b) - r_Ξ΄(a) ≀ ∫ |c'|_g`, and `Ξ΄ β†’ 0⁺` recovers the radius comparison with no corner analysis. ## Main statements @@ -64,10 +63,11 @@ namespace Riemannian section ChartMetricInnerCalculus variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Product rule for the chart Gram inner product at a **fixed** base point `yβ‚€`: for differentiable vector paths `V, W : ℝ β†’ E`, `d/dt ⟨V(t), W(t)⟩_{yβ‚€} = ⟨V'(t), W(t)⟩_{yβ‚€} + ⟨V(t), W'(t)⟩_{yβ‚€}`. @@ -111,6 +111,7 @@ theorem hasDerivAt_chartMetricInner_const_base (g : RiemannianMetric I M) (Ξ± : refine Finset.sum_congr rfl fun i _ => ?_ rw [← Finset.sum_add_distrib] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Continuity of the chart Gram pairing along a continuous base curve in the chart target, against continuous vector paths: `t ↦ ⟨V(t), W(t)⟩_{u(t)}` is continuous on `s` whenever `u, V, W` are and `u` stays in the chart target @@ -139,6 +140,7 @@ theorem continuousOn_chartMetricInner_along (g : RiemannianMetric I M) (Ξ± : M) simpa only [Geodesic.chartCoordFunctional_apply, Function.comp_def] using h exact (hG.mul hcV).mul hcW +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart Gram quadratic form is **positive semidefinite** at every base point `y` of the chart target: `0 ≀ ⟨a, a⟩_y`. The Gram pairing at `y` is the intrinsic inner product at the foot `(extChartAt I p).symm y`. -/ @@ -158,13 +160,14 @@ end ChartMetricInnerCalculus namespace Exponential variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] open Riemannian.Geodesic +omit [I.Boundaryless] [T2Space (TangentBundle I M)] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The smoothed-radius comparison** (do Carmo Ch. 3, the integral estimate (1)–(2) in the proof of Prop. 3.6), abstract in the chart reading `f` of the exponential map. Suppose on the ball `B_ρ(0)`: @@ -178,9 +181,9 @@ open interval with derivative extending continuously to the endpoints, the `g_p`-radius gain is bounded by the chart-read length of the composed curve `c = f ∘ w`: -`√⟨w(b), w(b)⟩_p βˆ’ √⟨w(a), w(a)⟩_p ≀ ∫_a^b βˆšβŸ¨Δ‹(t), Δ‹(t)⟩_{c(t)} dt`, +`√⟨w(b), w(b)⟩_p βˆ’ √⟨w(a), w(a)⟩_p ≀ ∫_a^b √⟨c'(t), c'(t)⟩_{c(t)} dt`, -with `Δ‹(t) = (df)_{w(t)} w'(t)` by the chain rule. The proof runs the estimate +with `c'(t) = (df)_{w(t)} w'(t)` by the chain rule. The proof runs the estimate on the smoothed radius `r_Ξ΄ = √(⟨w, w⟩_p + Ξ΄)`, which is differentiable even at zeros of `w`, and lets `Ξ΄ β†’ 0⁺`. Only interior differentiability is required (the fundamental theorem of calculus is applied in its @@ -281,7 +284,7 @@ theorem gauss_radius_comparison (g : RiemannianMetric I M) (p : M) refine intervalIntegral.integral_eq_sub_of_hasDeriv_right_of_le (f := fun s => Real.sqrt (Q s + Ξ΄)) hab hΟ†cont (fun t ht => (hΟ†deriv t ht).hasDerivWithinAt) hΟ†'_int - -- the pointwise bound `r_Ξ΄'(t) ≀ |Δ‹(t)|_g` + -- the pointwise bound `r_Ξ΄'(t) ≀ |c'(t)|_g` have hbound : βˆ€ t ∈ Icc a b, P t / Real.sqrt (Q t + Ξ΄) ≀ S t := by intro t ht have hRt := hR_nonneg t ht @@ -313,13 +316,14 @@ theorem gauss_radius_comparison (g : RiemannianMetric I M) (p : M) filter_upwards [self_mem_nhdsWithin] with Ξ΄ hΞ΄ exact hkey Ξ΄ hΞ΄ +omit [I.Boundaryless] [T2Space (TangentBundle I M)] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The reach estimate** (do Carmo Ch. 3, the escape case `β„“(c) β‰₯ ρ` in the proof of Prop. 3.6, polar form): under the hypotheses of `gauss_radius_comparison`, the `g_p`-radius reached by the polar lift at *any* intermediate time is dominated by the total length of the composed curve: -`√⟨w(t₁), w(t₁)⟩_p βˆ’ √⟨w(a), w(a)⟩_p ≀ ∫_a^b |Δ‹(t)| dt` for `t₁ ∈ [a, b]`. +`√⟨w(t₁), w(t₁)⟩_p βˆ’ √⟨w(a), w(a)⟩_p ≀ ∫_a^b |c'(t)| dt` for `t₁ ∈ [a, b]`. Radius comparison on `[a, t₁]`, then monotonicity of the integral of the (pointwise nonnegative) speed. With `w(a) = 0` this is do Carmo's escape @@ -371,6 +375,7 @@ theorem gauss_radius_reach (g : RiemannianMetric I M) (p : M) filter_upwards with t exact Real.sqrt_nonneg _ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The radius comparison on the Gauss ball of `exp_p`** (do Carmo Ch. 3, the integral estimate (2) in the proof of Prop. 3.6). There is `ρ > 0` with the ball `B_ρ(0) βŠ‚ T_pM` in the exponential domain and its image in the @@ -378,7 +383,7 @@ chart at `p`, such that for every differentiable path `w : [a, b] β†’ B_ρ(0)` with continuous derivative, the `g_p`-radius gain of `w` is at most the chart-read length of the curve `c = exp_p ∘ w`: -`√⟨w(b), w(b)⟩_p βˆ’ √⟨w(a), w(a)⟩_p ≀ ∫_a^b βˆšβŸ¨Δ‹, Δ‹βŸ©_{c(t)} dt`. -/ +`√⟨w(b), w(b)⟩_p βˆ’ √⟨w(a), w(a)⟩_p ≀ ∫_a^b √⟨c', c'⟩_{c(t)} dt`. -/ theorem exists_gauss_radius_comparison_ball (g : RiemannianMetric I M) (p : M) : βˆƒ ρ : ℝ, 0 < ρ ∧ (βˆ€ u : E, β€–uβ€– < ρ β†’ (u : TangentSpace I p) ∈ expDomain (I := I) g p) ∧ @@ -415,12 +420,13 @@ theorem exists_gauss_radius_comparison_ball (g : RiemannianMetric I M) (p : M) : (fun v ΞΎ hv => hradial v ΞΎ (hv.trans_le (min_le_left _ _))) hab hwc hw hw' hwball +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The reach estimate on the Gauss ball of `exp_p`** (do Carmo Ch. 3, the escape case in the proof of Prop. 3.6, polar form). On the Gauss ball: a curve `c = exp_p ∘ w` starting at `p` (`w(a) = 0`) has length at least the `g_p`-radius its polar lift reaches at any time: -`√⟨w(t₁), w(t₁)⟩_p ≀ ∫_a^b |Δ‹(t)| dt` for every `t₁ ∈ [a, b]`. +`√⟨w(t₁), w(t₁)⟩_p ≀ ∫_a^b |c'(t)| dt` for every `t₁ ∈ [a, b]`. In do Carmo's escape case, a competitor leaving the normal ball of `g_p`-radius `ρ'` reaches radius `ρ'`, so its length is at least `ρ' > β„“(Ξ³)`. -/ @@ -462,6 +468,7 @@ theorem exists_gauss_radius_reach_ball (g : RiemannianMetric I M) (p : M) : hwc hw hw' hwball ht₁ rwa [hwa, chartMetricInner_zero_left, Real.sqrt_zero, sub_zero] at hreach +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The radial geodesic has constant chart-read speed** (do Carmo Ch. 3, the identity `|βˆ‚f/βˆ‚r| = 1` in the proof of Prop. 3.6, unnormalized form). There is `ρ > 0` such that for every `v` with `β€–vβ€– < ρ` and every @@ -513,6 +520,7 @@ theorem exists_expMap_ray_speed_ball (g : RiemannianMetric I M) (p : M) : rw [map_smul, chartMetricInner_smul_left, chartMetricInner_smul_left] at hg exact mul_left_cancelβ‚€ ht0 hg +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Radial geodesics minimize on the Gauss ball** (do Carmo Ch. 3, Proposition 3.6, polar form). There is `ρ > 0` such that for every `v` with `β€–vβ€– < ρ` and every competing curve presented in polar form through the @@ -520,7 +528,7 @@ exponential chart β€” a differentiable `w : [0, 1] β†’ B_ρ(0) βŠ‚ T_pM` with continuous derivative, `w(0) = 0`, `w(1) = v` β€” the chart-read length of the radial geodesic `Ξ³(t) = exp_p(t v)` is at most that of `c(t) = exp_p(w(t))`: -`β„“(Ξ³) = ∫_0^1 βˆšβŸ¨Ξ³Μ‡, Ξ³Μ‡βŸ© dt = √⟨v, v⟩_p ≀ ∫_0^1 βˆšβŸ¨Δ‹, Δ‹βŸ© dt = β„“(c)`. +`β„“(Ξ³) = ∫_0^1 √⟨γ', Ξ³'⟩ dt = √⟨v, v⟩_p ≀ ∫_0^1 √⟨c', c'⟩ dt = β„“(c)`. The left-hand side is evaluated by the constant ray speed (`exists_expMap_ray_speed_ball`), the right-hand side is bounded below by the @@ -589,6 +597,7 @@ theorem exists_minimizing_geodesic_ball (g : RiemannianMetric I M) (p : M) : rw [hLHS] exact hRHS +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Radial geodesics minimize among curves in a normal ball** (do Carmo Ch. 3, Proposition 3.6, the case `c([0,1]) βŠ‚ B`). There is `Ξ΅ > 0` such that `exp_p` is injective on `B_Ξ΅(0) βŠ‚ T_pM` with open image (so diff --git a/OpenGALib/Riemannian/Exponential/NormalBallEDist.lean b/OpenGALib/Riemannian/Exponential/NormalBallEDist.lean index 169d3652..f93621ca 100644 --- a/OpenGALib/Riemannian/Exponential/NormalBallEDist.lean +++ b/OpenGALib/Riemannian/Exponential/NormalBallEDist.lean @@ -43,7 +43,6 @@ noncomputable section open Bundle Manifold MeasureTheory Set Filter Function Metric open scoped Manifold Topology ContDiff NNReal ENNReal -set_option linter.unusedSectionVars false namespace Riemannian @@ -52,11 +51,12 @@ namespace Exponential open Riemannian.Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** `exp_p` is an **open map on small balls** (do Carmo Ch. 3, Prop. 2.9, openness clause, localized): there is `ρ > 0` such that for every open `V βŠ† B_ρ(0) βŠ‚ T_pM`, both the chart reading `Ο†_p(exp_p(V))` and the image @@ -115,6 +115,7 @@ theorem exists_isOpen_expMap_image (g : RiemannianMetric I M) (p : M) : exact (continuousOn_extChartAt (I := I) p).isOpen_inter_preimage (isOpen_extChartAt_source p) hopen_f +omit [I.Boundaryless] [T2Space (TangentBundle I M)] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Smallness transfer at the base point: for any threshold `ΞΈ > 0`, coordinate vectors of small enough norm have `g_p`-squared-length below `ΞΈ`. The Gram quadratic form at the chart image of `p` is continuous and vanishes @@ -144,6 +145,7 @@ theorem exists_forall_chartMetricInner_self_lt (g : RiemannianMetric I M) (p : M obtain ⟨Ρ, hΞ΅, hball⟩ := Metric.eventually_nhds_iff_ball.mp hev exact ⟨Ρ, hΞ΅, fun w hw => hball w (by rwa [mem_ball_zero_iff])⟩ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The radial curve is `CΒΉ` with chart-read length `√⟨v, v⟩_p`** (do Carmo Ch. 3, the identity `β„“(Ξ³) = |v|` for the radial geodesic `Ξ³(t) = exp_p(tv)`, expressed through mathlib's `pathELength` under the @@ -242,6 +244,7 @@ theorem exists_pathELength_expMap_ray (g : RiemannianMetric I M) (p : M) : setIntegral_const] simp [Real.volume_real_Ioo] +omit [InnerProductSpace ℝ E] in /-- **Math.** **The competitor bound** (do Carmo Ch. 3, Prop. 3.6 together with its escape case, single-`CΒΉ`-piece form). There are `Ξ΅ > 0` and a Gram comparison constant `c > 0` at `p` such that, with `exp_p` injective on @@ -584,7 +587,7 @@ theorem exists_le_pathELength [T2Space M] (g : RiemannianMetric I M) (p : M) : exact hlinv v (hv.trans hΡΡ₁) rwa [hwv] at hbound Β· -- escape case: the curve is longer than `r'/√c > √⟨v,v⟩_p` - push_neg at hstay + push Not at hstay have hbound := hexit Οƒ hΟƒ hΟƒ0 hstay refine le_trans (ENNReal.ofReal_le_ofReal ?_) hbound have hQv : chartMetricInner (I := I) g p (extChartAt I p p) v v @@ -626,7 +629,7 @@ theorem exists_le_pathELength [T2Space M] (g : RiemannianMetric I M) (p : M) : _ ≀ Real.sqrt (chartMetricInner (I := I) g p (extChartAt I p p) z₁ z₁) := Real.sqrt_le_sqrt h2 Β· -- escape case: leaving `U` costs `r'/√c β‰₯ r/√c` - push_neg at hstay + push Not at hstay refine le_trans (ENNReal.ofReal_le_ofReal ?_) (hexit Οƒ hΟƒ hΟƒ0 hstay) gcongr exact hrΞ΅.trans hΞ΅r' @@ -768,6 +771,7 @@ section MetricNormalBall variable {M' : Type*} [MetricSpace M'] [ChartedSpace H M'] [IsManifold I ∞ M'] variable [T2Space (TangentBundle I M')] +omit [InnerProductSpace ℝ E] in /-- **Math.** **The metric normal ball** (do Carmo Ch. 3, Prop. 3.6, metric form; the geometry consumed by the Hopf–Rinow theorem, do Carmo Ch. 7, Theorem 2.8). Under the standing hypothesis that the ambient distance is the Riemannian @@ -837,7 +841,7 @@ theorem exists_edist_expMap_ball (g : RiemannianMetric I M') rw [IsRiemannianManifold.out (I := I) p (expMap (I := I) g p (v : TangentSpace I p))] by_contra hlt - push_neg at hlt + push Not at hlt obtain βŸ¨Οƒ, hΟƒ0, hΟƒ1, hΟƒC1, hΟƒlen⟩ := Manifold.exists_lt_of_riemannianEDist_lt hlt exact absurd hΟƒlen (not_lt.mpr (hlower v hvB Οƒ hΟƒC1 hΟƒ0 hΟƒ1)) @@ -845,13 +849,14 @@ theorem exists_edist_expMap_ball (g : RiemannianMetric I M') intro q hq rw [IsRiemannianManifold.out (I := I) p q] by_contra hlt - push_neg at hlt + push Not at hlt obtain βŸ¨Οƒ, hΟƒ0, hΟƒ1, hΟƒC1, hΟƒlen⟩ := Manifold.exists_lt_of_riemannianEDist_lt hlt have hout : Οƒ 1 βˆ‰ (fun w : E => expMap (I := I) g p (w : TangentSpace I p)) '' ball (0 : E) Ξ΅ := by rw [hΟƒ1]; exact hq exact absurd hΟƒlen (not_lt.mpr (hescape Ξ΅ hΞ΅ hΡΡB Οƒ hΟƒC1 hΟƒ0 hout)) +omit [InnerProductSpace ℝ E] in /-- **Math.** **Sphere-minimum distance decomposition** (do Carmo Ch. 7, proof of Theorem 2.8: the geodesic-sphere step). Under the standing hypothesis `g.IsRiemannianDist` there are `Ξ΅, c > 0` (depending only on `p`) such that for diff --git a/OpenGALib/Riemannian/Exponential/ProperAssembly.lean b/OpenGALib/Riemannian/Exponential/ProperAssembly.lean index 528124f6..4fb3f9f2 100644 --- a/OpenGALib/Riemannian/Exponential/ProperAssembly.lean +++ b/OpenGALib/Riemannian/Exponential/ProperAssembly.lean @@ -44,7 +44,6 @@ noncomputable section open Bundle Manifold Set Filter Metric open scoped Manifold Topology ContDiff -set_option linter.unusedSectionVars false namespace Riemannian @@ -53,13 +52,14 @@ namespace Exponential open Riemannian.Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] variable {M' : Type*} [MetricSpace M'] [ChartedSpace H M'] [IsManifold I ∞ M'] variable [T2Space (TangentBundle I M')] +omit [InnerProductSpace ℝ E] in /-- **Math.** **Geodesic completeness at a point implies properness** (do Carmo Ch. 7, Theorem 2.8, f) ⟹ b)): if every tangent vector at `p` generates a continuous global geodesic, and geodesics from `p` depend @@ -152,6 +152,7 @@ theorem properSpace_of_forall_geodesic (g : RiemannianMetric I M') exact (key (dist p x + r)).of_isClosed_subset isClosed_closedBall (Metric.closedBall_subset_closedBall' (by rw [dist_comm x p, add_comm])) +omit [InnerProductSpace ℝ E] in /-- **Math.** **Geodesic completeness at a point implies metric completeness** (do Carmo Ch. 7, Theorem 2.8, f) ⟹ c)): under the hypotheses of `properSpace_of_forall_geodesic`, the manifold is a complete metric space β€” diff --git a/OpenGALib/Riemannian/Exponential/Ray.lean b/OpenGALib/Riemannian/Exponential/Ray.lean index ee988b3d..3e81db69 100644 --- a/OpenGALib/Riemannian/Exponential/Ray.lean +++ b/OpenGALib/Riemannian/Exponential/Ray.lean @@ -2,7 +2,6 @@ import OpenGALib.Riemannian.Exponential.Defs import OpenGALib.Riemannian.Geodesic.Homogeneity import OpenGALib.Riemannian.Geodesic.InitialVelocity -set_option linter.unusedSectionVars false /-! # The exponential map along rays @@ -35,11 +34,12 @@ namespace Exponential open Riemannian.Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The exponential map along a ray is the geodesic** (do Carmo Ch. 3, after Prop. 2.7): `exp_p (t β€’ v) = Ξ³(t, p, v)` whenever `t` lies in the maximal interval of the geodesic with initial data `(p, v)`. The chart-validity clause @@ -60,6 +60,7 @@ theorem expMap_smul (g : RiemannianMetric I M) (p : M) (v : TangentSpace I p) (a := t) (t := 1) ht0 h1 hsrc rwa [mul_one] at h +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **`d(exp_p)_0 = id` along rays** (do Carmo Ch. 3, the computation in Prop. 2.9): read in the chart at `p`, the curve `t ↦ exp_p(t β€’ v)` has derivative `v` at `t = 0`: diff --git a/OpenGALib/Riemannian/Exponential/RayGeodesic.lean b/OpenGALib/Riemannian/Exponential/RayGeodesic.lean index 152ab177..9c18b6b9 100644 --- a/OpenGALib/Riemannian/Exponential/RayGeodesic.lean +++ b/OpenGALib/Riemannian/Exponential/RayGeodesic.lean @@ -29,7 +29,6 @@ noncomputable section open Bundle Manifold Set Filter Metric open scoped Manifold Topology ContDiff -set_option linter.unusedSectionVars false namespace Riemannian @@ -38,11 +37,12 @@ namespace Exponential open Riemannian.Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Exponential rays are intrinsic geodesics** (do Carmo Ch. 3, Prop. 2.7 / definition of `exp_p`, in the moving-chart form consumed by the Hopf–Rinow theorem). There are `ρ > 0` and `b > 1` such that: diff --git a/OpenGALib/Riemannian/Exponential/RayODE.lean b/OpenGALib/Riemannian/Exponential/RayODE.lean index 3e8b4d7e..c7940c13 100644 --- a/OpenGALib/Riemannian/Exponential/RayODE.lean +++ b/OpenGALib/Riemannian/Exponential/RayODE.lean @@ -1,7 +1,6 @@ import OpenGALib.Riemannian.Geodesic.FlowC2Dependence import OpenGALib.Riemannian.Exponential.C2Ball -set_option linter.unusedSectionVars false set_option maxSynthPendingDepth 3 /-! @@ -14,7 +13,7 @@ besides the `CΒ²` regularity of the chart reading that each ray curve `t ↦ f(tΒ·u)` satisfies the **chart-coordinate geodesic equation**: its velocity `V(t) = (df)_{tΒ·u}(u)` obeys -`VΜ‡(t) = βˆ’Ξ“_p(V(t), V(t))(f(tΒ·u))`, +`V'(t) = βˆ’Ξ“_p(V(t), V(t))(f(tΒ·u))`, and `(df)_0 = id`. This file provides these facts on a common ball: @@ -43,12 +42,12 @@ namespace Exponential open Riemannian.Geodesic Riemannian.FlowDependence variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] -set_option maxHeartbeats 1000000 in +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The chart reading of `exp_p` is `CΒ²` on a ball and satisfies the geodesic ODE along rays** (do Carmo Ch. 3, Β§2–3; the analytic package for the Gauss lemma 3.5). There are `ρ > 0` and `b > 1` such that, writing diff --git a/OpenGALib/Riemannian/Exponential/SegmentUpperBound.lean b/OpenGALib/Riemannian/Exponential/SegmentUpperBound.lean index 39274a07..06665d92 100644 --- a/OpenGALib/Riemannian/Exponential/SegmentUpperBound.lean +++ b/OpenGALib/Riemannian/Exponential/SegmentUpperBound.lean @@ -30,14 +30,11 @@ directions `u₁ β‰  -uβ‚‚` admits the strictly shorter chord `ΞΈΒ·|Ξ· uβ‚‚ βˆ’ Ξ· u₁|_p < 2Ξ·` β€” see `CornerRigidity.lean`. -/ -set_option maxHeartbeats 800000 - noncomputable section open Bundle Manifold MeasureTheory Set Filter Metric open scoped Manifold Topology ContDiff -set_option linter.unusedSectionVars false namespace Riemannian @@ -46,13 +43,14 @@ namespace Exponential open Riemannian.Geodesic Riemannian.FlowDependence variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] variable {M' : Type*} [MetricSpace M'] [ChartedSpace H M'] [IsManifold I ∞ M'] variable [T2Space (TangentBundle I M')] +omit [InnerProductSpace ℝ E] in /-- **Math.** **The chord upper bound at the pole of a normal ball** (do Carmo Ch. 3 Β§3, the `C⁰` comparability of `d` with the flat metric of `T_pM` near `p`). Under the standing hypothesis `g.IsRiemannianDist`, for every `ΞΈ > 1` diff --git a/OpenGALib/Riemannian/Exponential/StrictDerivative.lean b/OpenGALib/Riemannian/Exponential/StrictDerivative.lean index b6957b3d..1b0334da 100644 --- a/OpenGALib/Riemannian/Exponential/StrictDerivative.lean +++ b/OpenGALib/Riemannian/Exponential/StrictDerivative.lean @@ -2,7 +2,6 @@ import OpenGALib.Riemannian.Geodesic.UniformExistence import OpenGALib.Riemannian.Geodesic.FlowDependence import OpenGALib.Riemannian.Exponential.Ray -set_option linter.unusedSectionVars false /-! # Strict differentiability of the exponential map at the origin @@ -46,11 +45,12 @@ namespace Exponential open Riemannian.Geodesic Riemannian.FlowDependence variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The two-step nilpotent linearization `A(u, w) = (w, 0)` of the geodesic spray squares to zero. -/ lemma sprayLinearization_comp_self : @@ -60,7 +60,7 @@ lemma sprayLinearization_comp_self : refine ContinuousLinearMap.ext fun z => ?_ simp -set_option maxHeartbeats 800000 in +omit [T2Space (TangentBundle I M)] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The linearization of the geodesic spray at the zero section.** At the equilibrium `(Ο†_p(p), 0)`, the derivative of `F(x, w) = (w, -Ξ“_p(w, w)(x))` is the nilpotent map `A(u, w) = (w, 0)`: the Christoffel contraction is quadratic in `w`, @@ -166,7 +166,9 @@ lemma fderiv_geodesicSprayCoord_equilibrium (g : RiemannianMetric I M) (p : M) : rw [huniq] simp -set_option maxHeartbeats 1000000 in +-- The implicit-function argument times out at 250000 heartbeats; 300000 is sufficient. +set_option maxHeartbeats 300000 in +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **`exp_p` is strictly differentiable at `0` with derivative the identity** (do Carmo Ch. 3, Prop. 2.9, strict-derivative form). There is `ρ > 0` such that every `w` with `β€–wβ€– < ρ` lies in the exponential domain, `exp_p(w)` @@ -431,6 +433,7 @@ theorem exists_hasStrictFDerivAt_extChartAt_expMap have hfinal := hcomp.congr_of_eventuallyEq hev.symm rwa [hDtot] at hfinal +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **`exp_p` maps neighbourhoods of `0` onto neighbourhoods of `p`** (do Carmo Ch. 3, Prop. 2.9, topological content): the exponential map at `p` sends the neighbourhood filter of `0 ∈ T_pM` exactly to the neighbourhood filter @@ -468,6 +471,7 @@ theorem map_expMap_nhds (g : RiemannianMetric I M) (p : M) : have hsymm := map_extChartAt_symm_nhdsWithin_range (I := I) p rwa [I.range_eq_univ, nhdsWithin_univ] at hsymm +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **`exp_p` is injective near `0`** (do Carmo Ch. 3, Prop. 2.9, injectivity content): there is `ρ > 0` such that `exp_p` is injective on the ball of radius `ρ` in `T_pM`, whose points all lie in the exponential domain. -/ diff --git a/OpenGALib/Riemannian/Exponential/StrictDerivativeBall.lean b/OpenGALib/Riemannian/Exponential/StrictDerivativeBall.lean index b05be2ef..3d8e56e6 100644 --- a/OpenGALib/Riemannian/Exponential/StrictDerivativeBall.lean +++ b/OpenGALib/Riemannian/Exponential/StrictDerivativeBall.lean @@ -1,7 +1,6 @@ import OpenGALib.Riemannian.Geodesic.FlowC1Dependence import OpenGALib.Riemannian.Exponential.Ray -set_option linter.unusedSectionVars false /-! # Strict differentiability of the exponential map on a ball @@ -43,12 +42,12 @@ namespace Exponential open Riemannian.Geodesic Riemannian.FlowDependence variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] -set_option maxHeartbeats 1000000 in +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **`exp_p` is strictly differentiable at every point of a ball around the origin** (do Carmo Ch. 3, Prop. 2.9, CΒΉ-regularity content away from the origin). There is `ρ > 0` such that every `w` with `β€–wβ€– < ρ` lies in the exponential domain, @@ -218,6 +217,7 @@ theorem exists_hasStrictFDerivAt_extChartAt_expMap_ball exact (key w (mem_ball_zero_iff.mp hw)).2.2 exact ⟨_, hcomp.congr_of_eventuallyEq hev.symm⟩ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **`exp_p` is `CΒΉ` on a ball around the origin** (do Carmo Ch. 3, Prop. 2.9, `CΒΉ`-regularity clause). There is `ρ > 0` such that the ball `B_ρ(0) βŠ‚ T_pM` lies in the exponential domain, its image under `exp_p` stays in the chart at `p`, and the chart diff --git a/OpenGALib/Riemannian/Geodesic/ChartFlow.lean b/OpenGALib/Riemannian/Geodesic/ChartFlow.lean index 547b2841..e1b28519 100644 --- a/OpenGALib/Riemannian/Geodesic/ChartFlow.lean +++ b/OpenGALib/Riemannian/Geodesic/ChartFlow.lean @@ -1,6 +1,5 @@ import OpenGALib.Riemannian.Geodesic.InitialVelocity -set_option linter.unusedSectionVars false /-! # The chart-`p` geodesic flow: spray in chart coordinates and transfer of solutions @@ -52,7 +51,7 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] @@ -60,6 +59,7 @@ section ChartTarget variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The tangent-bundle chart at a basepoint over `p` has target the product of the base chart target with the full fibre: `Ο†_{⟨p,0⟩}(TM) = Ο†_p(U_p) Γ— E`. -/ lemma extChartAt_tangent_target (p : M) : @@ -72,6 +72,7 @@ lemma extChartAt_tangent_target (p : M) : rw [mem_preimage, TangentBundle.trivializationAt_baseSet, ← extChartAt_source I] exact (extChartAt I p).map_target hy +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The tangent-bundle chart at a basepoint over `p` has source the chart-`p` spray domain: the tangent vectors whose foot lies in the chart at `p`. -/ lemma extChartAt_tangent_source (p : M) : @@ -81,6 +82,7 @@ lemma extChartAt_tangent_source (p : M) : rw [extChartAt_source, TangentBundle.mem_chart_source_iff] exact Iff.rfl +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The tangent-bundle chart target at `⟨p, 0⟩` is open (the base chart target is open on a boundaryless manifold, and the fibre factor is everything). -/ lemma isOpen_extChartAt_tangent_target (p : M) : @@ -88,6 +90,7 @@ lemma isOpen_extChartAt_tangent_target (p : M) : rw [extChartAt_tangent_target] exact (isOpen_extChartAt_target p).prod isOpen_univ +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** Reading a tangent vector through the tangent-bundle chart at `⟨p, 0⟩` and back: the foot of `Ο†_{⟨p,0⟩}⁻¹(ΞΆ)` has chart-`p` image the first component of `ΞΆ`, for `ΞΆ` in the chart target. -/ @@ -110,6 +113,7 @@ lemma extChartAt_proj_extChartAt_tangent_symm (p : M) {ΞΆ : E Γ— E} rw [happ] at hri exact congrArg Prod.fst hri +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The foot of a chart-read tangent vector stays in the chart at `p`: for `ΞΆ` in the tangent-bundle chart target, the foot of `Ο†_{⟨p,0⟩}⁻¹(ΞΆ)` lies in the chart source at `p`. -/ @@ -121,6 +125,7 @@ lemma proj_extChartAt_tangent_symm_mem_chartAt_source (p : M) {ΞΆ : E Γ— E} rw [extChartAt_tangent_source (I := I) p] at hsrc exact proj_mem_chartAt_source_of_mem_geodesicChartDomain (I := I) hsrc +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The tangent-bundle chart at `⟨p, 0⟩` sends the initial point `⟨p, v⟩` to `(Ο†_p(p), v)`; equivalently, its inverse sends `(Ο†_p(p), v)` back to `⟨p, v⟩`. -/ lemma extChartAt_tangent_symm_mk (p : M) (v : TangentSpace I p) : @@ -150,6 +155,7 @@ section SprayCoordSmooth variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** On the tangent-bundle chart target, the coordinate spray `(x, w) ↦ (w, -Ξ“_p(w, w)(x))` is the chart-fixed spray fibre read through the chart: `F = (geodesicVectorFieldChartFiber g p) ∘ Ο†_{⟨p,0⟩}⁻¹`. -/ @@ -180,6 +186,7 @@ lemma geodesicSprayCoord_eqOn_chartFiber_comp (g : RiemannianMetric I M) (p : M) have h2 : chartFiberCoord (I := I) p (Ξ¨.symm ΞΆ) = ΞΆ.2 := congrArg Prod.snd hri rw [h1, h2] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Smoothness of the coordinate geodesic spray.** The map `(x, w) ↦ (w, -Ξ“_p(w, w)(x)) : E Γ— E β†’ E Γ— E` is `C^∞` on the chart target `Ο†_p(U_p) Γ— E`: it is the chart reading of the chart-fixed spray fibre on `TM`, @@ -212,6 +219,7 @@ section ReverseBridge variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Chart solutions of the spray ODE are integral curves of the chart-fixed spray.** If `z : ℝ β†’ E Γ— E` solves `z' = (zβ‚‚, -Ξ“_p(zβ‚‚, zβ‚‚)(z₁))` on an open set `J` with values in the tangent-bundle chart target at `⟨p, 0⟩`, then @@ -278,6 +286,7 @@ theorem isMIntegralCurveOn_extChartAt_tangent_symm rw [← Ξ¨.right_inv hΞΆ] exact hasFDerivWithinAt_tangentCoordChange ⟨hq_src, hq_self⟩ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Chart solutions descend to geodesic witnesses.** A solution `z : ℝ β†’ E Γ— E` of the coordinate spray ODE on an open `J βˆ‹ 0` with values in the tangent-bundle chart target and initial value `z 0 = (Ο†_p(p), v)` projects to a @@ -313,8 +322,9 @@ end ReverseBridge section UnconditionalValue -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The canonical maximal geodesic agrees with any in-chart witness, unconditionally.** If `Ξ³β‚€` is a geodesic witness with initial data `(p, v)` on an open preconnected `Jβ‚€ βˆ‹ 0` whose own foot stays in the chart at `p`, then the @@ -342,6 +352,7 @@ theorem maximalGeodesic_eq_witness_of_mem_chart (fun t ht => hsrcβ‚€ t (inter_subset_left ht)) exact (heq ⟨hs, hsβ‚βŸ©).symm +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] [T2Space (TangentBundle I M)] in /-- **Math.** The interval of any geodesic witness is contained in the maximal interval. -/ theorem subset_maximalGeodesicInterval_of_witness @@ -352,6 +363,7 @@ theorem subset_maximalGeodesicInterval_of_witness Jβ‚€ βŠ† maximalGeodesicInterval (I := I) g p v := fun _ hs => βŸ¨Ξ³β‚€, Jβ‚€, hJo, hJc, h0, hs, hΞ³β‚€βŸ© +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The canonical maximal geodesic is computed by chart solutions of the spray ODE.** If `z` solves the coordinate spray ODE on an open preconnected `J βˆ‹ 0` inside the chart target with `z 0 = (Ο†_p(p), v)`, then on `J` the @@ -373,6 +385,7 @@ theorem maximalGeodesic_eq_of_hasDerivAt_sprayCoord isGeodesicOnWithInitial_of_hasDerivAt_sprayCoord (I := I) g p v hz0 hd hmem exact maximalGeodesic_eq_witness_of_mem_chart (I := I) hwit hJ hJc h0J hsrc hs +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart-`p` reading of the canonical maximal geodesic along a chart solution of the spray ODE: `Ο†_p(Ξ³(s, p, v)) = (z s).1` on the solution interval. -/ theorem extChartAt_maximalGeodesic_of_hasDerivAt_sprayCoord diff --git a/OpenGALib/Riemannian/Geodesic/Completeness.lean b/OpenGALib/Riemannian/Geodesic/Completeness.lean index 648b4005..d8d0c0c7 100644 --- a/OpenGALib/Riemannian/Geodesic/Completeness.lean +++ b/OpenGALib/Riemannian/Geodesic/Completeness.lean @@ -4,7 +4,6 @@ import OpenGALib.Riemannian.Geodesic.HopfRinow.GramBound import OpenGALib.Riemannian.Geodesic.UniformExistence import OpenGALib.Riemannian.Geodesic.InitialVelocity -set_option linter.unusedSectionVars false /-! # Metric completeness implies geodesic completeness (do Carmo Ch. 7, Thm 2.8, c ⟹ d) @@ -51,7 +50,7 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} /-! ## Affine reparametrisation of the geodesic equation @@ -65,6 +64,7 @@ section Reparam variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Pointwise time-translation of the geodesic equation.** If `Ξ³` satisfies the moving-foot geodesic equation at `Ο„ + c`, then the translate `s ↦ Ξ³ (s + c)` satisfies it at `Ο„`. (The pointwise content of @@ -105,6 +105,7 @@ theorem hasGeodesicEquationAt_comp_add exact ha.comp_add_const Ο„ c Β· exact hgeo +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Pointwise affine reparametrisation of the geodesic equation.** If `Ξ³` satisfies the moving-foot geodesic equation at `ΞΊΒ·Ο„ + c`, the affine reparametrisation `s ↦ Ξ³ (ΞΊΒ·s + c)` satisfies it at `Ο„`. -/ @@ -116,6 +117,7 @@ theorem hasGeodesicEquationAt_comp_affine (Ξ³ := fun s => Ξ³ (s + c)) (a := ΞΊ) (Ο„ := Ο„) (hasGeodesicEquationAt_comp_add (Ο„ := ΞΊ * Ο„) (c := c) hΞ³) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Affine reparametrisation of a geodesic on a set.** If `Ξ³` is a geodesic on `s`, then `t ↦ Ξ³ (ΞΊΒ·t + c)` is a geodesic on the affine preimage of `s`. -/ @@ -136,6 +138,7 @@ section Endpoint variable {M : Type*} [MetricSpace M] [ChartedSpace H M] [IsManifold I ∞ M] [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **A geodesic converges at a finite endpoint of its interval** (do Carmo Ch. 7, proof of Theorem 2.8, c) ⟹ d): the Cauchy step). A continuous geodesic on `(a, b)`, `b` finite, is `√(speedSq)`-Lipschitz, hence Cauchy at @@ -206,8 +209,9 @@ end Endpoint section Extension variable {M : Type*} [MetricSpace M] [ChartedSpace H M] [IsManifold I ∞ M] - [I.Boundaryless] [CompleteSpace E] + [I.Boundaryless] +omit [InnerProductSpace ℝ E] in /-- **Math.** **A geodesic on a bounded-above interval extends forward** (do Carmo Ch. 7, proof of Theorem 2.8, c) ⟹ d): the prolongation step). Under metric completeness, a continuous geodesic on `(a, b)` with `b` finite extends, @@ -455,7 +459,7 @@ theorem IsGeodesicOn.exists_forward_extension (g : RiemannianMetric I M) by_cases htb : t < b Β· exact hasGeodesicEquationAt_congr_of_eventuallyEq (hglue₁ t ⟨ht.1, htb⟩) (hΞ΄geo t ⟨ht.1, htb⟩) - Β· push_neg at htb + Β· push Not at htb exact hasGeodesicEquationAt_congr_of_eventuallyEq (hglueβ‚‚ t htb ht.2) (hΟƒgeo t ⟨by linarith [ht₁Ρ, htb], ht.2⟩) @@ -465,7 +469,7 @@ theorem IsGeodesicOn.exists_forward_extension (g : RiemannianMetric I M) by_cases htb : t < b Β· exact ((hΞ΄cont t ⟨ht.1, htb⟩).continuousAt (isOpen_Ioo.mem_nhds ⟨ht.1, htb⟩)).congr (hglue₁ t ⟨ht.1, htb⟩).symm - Β· push_neg at htb + Β· push Not at htb exact ((hΟƒcont t ⟨by linarith [ht₁Ρ, htb], ht.2⟩).continuousAt (isOpen_Ioo.mem_nhds ⟨by linarith [ht₁Ρ, htb], ht.2⟩)).congr (hglueβ‚‚ t htb ht.2).symm @@ -475,40 +479,25 @@ theorem IsGeodesicOn.exists_forward_extension (g : RiemannianMetric I M) have hΞ΄pos : 0 < Ξ΄ := by rw [hΞ΄_def] nlinarith [mul_pos hΞΊ0 hΞ΅, hclose₁] + have hpre : Ioo a (b + Ξ΄) βŠ† + (fun t => κ⁻¹ * t + -(κ⁻¹ * cβ‚€)) ⁻¹' (Ioo a' (t₁ + Ξ΅)) := by + intro t ht + have hinv0 : (0 : ℝ) < κ⁻¹ := by positivity + constructor + Β· rw [ha'_def] + have := mul_lt_mul_of_pos_left ht.1 hinv0 + linarith + Β· have hupper : t < t₁' + ΞΊ * Ξ΅ := by + have := ht.2; rw [hΞ΄_def] at this; linarith + have h2 : κ⁻¹ * t < κ⁻¹ * (t₁' + ΞΊ * Ξ΅) := + mul_lt_mul_of_pos_left hupper hinv0 + have h3 : κ⁻¹ * (t₁' + ΞΊ * Ξ΅) + -(κ⁻¹ * cβ‚€) = t₁ + Ξ΅ := by + rw [ht₁_def]; field_simp [hΞΊ0.ne']; ring + linarith refine ⟨δ, hΞ΄pos, Ξ³', ?_, ?_, ?_⟩ Β· -- continuity of the extension - have hmapsTo : βˆ€ t ∈ Ioo a (b + Ξ΄), - κ⁻¹ * t + -(κ⁻¹ * cβ‚€) ∈ Ioo a' (t₁ + Ξ΅) := by - intro t ht - have hinv0 : (0 : ℝ) < κ⁻¹ := by positivity - constructor - Β· rw [ha'_def] - have := mul_lt_mul_of_pos_left ht.1 hinv0 - linarith - Β· have hupper : t < t₁' + ΞΊ * Ξ΅ := by - have := ht.2; rw [hΞ΄_def] at this; linarith - have h2 : κ⁻¹ * t < κ⁻¹ * (t₁' + ΞΊ * Ξ΅) := - mul_lt_mul_of_pos_left hupper hinv0 - have h3 : κ⁻¹ * (t₁' + ΞΊ * Ξ΅) + -(κ⁻¹ * cβ‚€) = t₁ + Ξ΅ := by - rw [ht₁_def]; field_simp [hΞΊ0.ne']; ring - linarith - exact hΞ³new_cont.comp (Continuous.continuousOn (by fun_prop)) hmapsTo + exact hΞ³new_cont.comp (Continuous.continuousOn (by fun_prop)) hpre Β· -- the extension is a geodesic - have hpre : Ioo a (b + Ξ΄) βŠ† - (fun t => κ⁻¹ * t + -(κ⁻¹ * cβ‚€)) ⁻¹' (Ioo a' (t₁ + Ξ΅)) := by - intro t ht - have hinv0 : (0 : ℝ) < κ⁻¹ := by positivity - constructor - Β· rw [ha'_def] - have := mul_lt_mul_of_pos_left ht.1 hinv0 - linarith - Β· have hupper : t < t₁' + ΞΊ * Ξ΅ := by - have := ht.2; rw [hΞ΄_def] at this; linarith - have h2 : κ⁻¹ * t < κ⁻¹ * (t₁' + ΞΊ * Ξ΅) := - mul_lt_mul_of_pos_left hupper hinv0 - have h3 : κ⁻¹ * (t₁' + ΞΊ * Ξ΅) + -(κ⁻¹ * cβ‚€) = t₁ + Ξ΅ := by - rw [ht₁_def]; field_simp [hΞΊ0.ne']; ring - linarith exact (isGeodesicOn_comp_affine (I := I) hΞ³new_geo).mono hpre Β· -- the extension agrees with `Ξ³` below `b` intro t ht @@ -530,8 +519,9 @@ end Extension section Global variable {M : Type*} [MetricSpace M] [ChartedSpace H M] [IsManifold I ∞ M] - [I.Boundaryless] [CompleteSpace E] + [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Local existence, intrinsic symmetric-interval form** (do Carmo Ch. 3, Theorem 2.2 / Ch. 7 proof of Theorem 2.8). For every initial datum `(p, v)` there are `b > 0` and a continuous intrinsic geodesic on `(-b, b)` @@ -640,6 +630,7 @@ theorem exists_seed_geodesic (g : RiemannianMetric I M) (p : M) linarith exact (isGeodesicOn_comp_mul_left (I := I) hΟƒgeo).mono hpre +omit [InnerProductSpace ℝ E] in /-- **Math.** **Every initial datum generates a geodesic defined on all of `ℝ`** (do Carmo Ch. 7, Theorem 2.8, c) ⟹ d), the maximal-interval argument). Under metric completeness, the (uniqueness-coherent) family of symmetric-interval diff --git a/OpenGALib/Riemannian/Geodesic/CovariantDerivative.lean b/OpenGALib/Riemannian/Geodesic/CovariantDerivative.lean index 5e74e234..57a8d4a6 100644 --- a/OpenGALib/Riemannian/Geodesic/CovariantDerivative.lean +++ b/OpenGALib/Riemannian/Geodesic/CovariantDerivative.lean @@ -23,7 +23,7 @@ This file records: * `Riemannian.IsParallelCoord g Ξ± u V` β€” do Carmo Def. 2.5: `V` is **parallel** along the curve when `DV/dt ≑ 0`. * `covariantDerivCoord_eq_zero_iff` β€” the parallelism equation in solved ODE form - `VΜ‡ = βˆ’Ξ“(uΜ‡, V)(u)`, the first-order linear system whose Picard–LindelΓΆf theory + `V' = βˆ’Ξ“(u', V)(u)`, the first-order linear system whose Picard–LindelΓΆf theory yields parallel transport (do Carmo Prop. 2.6). Reference: do Carmo, *Riemannian Geometry*, Ch. 2 Β§2, Prop. 2.2, Def. 2.5, Prop. 2.6. @@ -32,32 +32,33 @@ Reference: do Carmo, *Riemannian Geometry*, Ch. 2 Β§2, Prop. 2.2, Def. 2.5, Prop open scoped Manifold Topology ContDiff open Set -set_option linter.unusedSectionVars false noncomputable section namespace Riemannian variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] /-- **Math.** do Carmo Ch. 2, Prop. 2.2, formula (1). The **covariant derivative** `DV/dt` of a coordinate vector field `V : ℝ β†’ E` along the coordinate curve `u : ℝ β†’ E`, read in the fixed chart at `Ξ±`: -`DV/dt = VΜ‡ + Ξ“(uΜ‡, V)(u)`, where `Ξ“` is `Geodesic.chartChristoffelContraction g Ξ±`. +`DV/dt = V' + Ξ“(u', V)(u)`, where `Ξ“` is `Geodesic.chartChristoffelContraction g Ξ±`. This is the closed expression forced on any operator satisfying do Carmo's axioms (a)–(c); the file proves it satisfies (a) and (b). -/ def covariantDerivCoord (g : RiemannianMetric I M) (Ξ± : M) (u V : ℝ β†’ E) (t : ℝ) : E := deriv V t + Geodesic.chartChristoffelContraction (I := I) g Ξ± (deriv u t) (V t) (u t) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] theorem covariantDerivCoord_def (g : RiemannianMetric I M) (Ξ± : M) (u V : ℝ β†’ E) (t : ℝ) : covariantDerivCoord (I := I) g Ξ± u V t = deriv V t + Geodesic.chartChristoffelContraction (I := I) g Ξ± (deriv u t) (V t) (u t) := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 2, Prop. 2.2 (a): the covariant derivative along a curve is **additive** in the vector field, `D/dt (V + W) = DV/dt + DW/dt`. -/ theorem covariantDerivCoord_add (g : RiemannianMetric I M) (Ξ± : M) (u V W : ℝ β†’ E) @@ -68,8 +69,9 @@ theorem covariantDerivCoord_add (g : RiemannianMetric I M) (Ξ± : M) (u V W : ℝ Geodesic.chartChristoffelContraction_add_right] abel +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 2, Prop. 2.2 (b): the **Leibniz rule** for the covariant -derivative along a curve, `D/dt (f Β· V) = ḟ Β· V + f Β· DV/dt`, for a scalar +derivative along a curve, `D/dt (f Β· V) = f' Β· V + f Β· DV/dt`, for a scalar `f : ℝ β†’ ℝ` differentiable along the curve. -/ theorem covariantDerivCoord_smul (g : RiemannianMetric I M) (Ξ± : M) (u : ℝ β†’ E) (f : ℝ β†’ ℝ) (V : ℝ β†’ E) {t : ℝ} @@ -86,8 +88,9 @@ chart at `Ξ±`) when its covariant derivative vanishes identically, `DV/dt ≑ 0` def IsParallelCoord (g : RiemannianMetric I M) (Ξ± : M) (u V : ℝ β†’ E) : Prop := βˆ€ t, covariantDerivCoord (I := I) g Ξ± u V t = 0 +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The parallel-transport ODE in solved form. `V` is parallel along `u` -iff it solves the first-order **linear** system `VΜ‡(t) = βˆ’Ξ“(uΜ‡(t), V(t))(u(t))` +iff it solves the first-order **linear** system `V'(t) = βˆ’Ξ“(u'(t), V(t))(u(t))` (linear in `V(t)` by `chartChristoffelContraction_add_right` / `chartChristoffelContraction_smul_right`). This is the equation whose Picard–LindelΓΆf theory gives existence and uniqueness of parallel transport @@ -114,9 +117,9 @@ theorem isParallelCoord_iff_hasDerivAt (g : RiemannianMetric I M) (Ξ± : M) continuous linear map. For a fixed velocity `v` and base point `y` read in the chart at `Ξ±`, the map `w ↦ Ξ“(v, w)(y)` is linear (by `chartChristoffelContraction_add_right` / `_smul_right`), hence β€” the model space -`E` being finite-dimensional β€” continuous. Writing `A(t) = Ξ“(uΜ‡(t), Β·)(u(t))`, a +`E` being finite-dimensional β€” continuous. Writing `A(t) = Ξ“(u'(t), Β·)(u(t))`, a vector field `V` along `u` is parallel iff it solves the first-order linear system -`VΜ‡ = βˆ’A(t) V`; this is the coefficient `A(t)`, whose operator norm is the natural +`V' = βˆ’A(t) V`; this is the coefficient `A(t)`, whose operator norm is the natural Lipschitz constant of the right-hand side (see `lipschitzWith_neg_chartChristoffelContraction`). -/ def chartChristoffelContractionRight (g : RiemannianMetric I M) (Ξ± : M) (v y : E) : E β†’L[ℝ] E := @@ -127,10 +130,12 @@ def chartChristoffelContractionRight (g : RiemannianMetric I M) (Ξ± : M) (v y : map_smul' := fun a w => by simpa using Geodesic.chartChristoffelContraction_smul_right (I := I) g Ξ± v a w y } +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] theorem chartChristoffelContractionRight_apply (g : RiemannianMetric I M) (Ξ± : M) (v y w : E) : chartChristoffelContractionRight (I := I) g Ξ± v y w = Geodesic.chartChristoffelContraction (I := I) g Ξ± v w y := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The right-hand side of the parallel-transport ODE is globally Lipschitz in the vector-field slot, with the operator norm of the coefficient `chartChristoffelContractionRight g Ξ± v y` as an explicit Lipschitz constant. This is the @@ -143,15 +148,16 @@ theorem lipschitzWith_neg_chartChristoffelContraction (g : RiemannianMetric I M) have h := (chartChristoffelContractionRight (I := I) g Ξ± v y).lipschitz.neg simpa only [chartChristoffelContractionRight_apply] using h +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 2, Prop. 2.6 (uniqueness half): **uniqueness of parallel transport**. On a time interval `[a, b]`, two parallel vector fields along the same coordinate curve `u` that agree at the left endpoint `a` agree on all of `[a, b]`. This is the uniqueness of solutions of the first-order linear system -`VΜ‡ = βˆ’Ξ“(uΜ‡, V)(u)` (`isParallelCoord_iff_hasDerivAt`), obtained from GrΓΆnwall's +`V' = βˆ’Ξ“(u', V)(u)` (`isParallelCoord_iff_hasDerivAt`), obtained from GrΓΆnwall's inequality via `ODE_solution_unique_of_mem_Icc_right`. The only hypothesis on the curve is the clean operator-norm bound `hK` on the ODE coefficient -`chartChristoffelContractionRight g Ξ± (uΜ‡ t) (u t)` over `[a, b)`; for a `CΒΉ` curve `u` and +`chartChristoffelContractionRight g Ξ± (u' t) (u t)` over `[a, b)`; for a `CΒΉ` curve `u` and continuous Christoffel symbols such a `K` always exists by compactness of `[a, b]`. The uniform Lipschitz constant needed by GrΓΆnwall is produced internally from `hK` via `lipschitzWith_neg_chartChristoffelContraction`. -/ @@ -178,14 +184,15 @@ theorem isParallelCoord_eqOn_Icc (g : RiemannianMetric I M) (Ξ± : M) (u : ℝ hW.continuous.continuousOn (fun t _ => (hWd t).hasDerivWithinAt) (fun _ _ => Set.mem_univ _) ha +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 2, Prop. 2.6 (existence half): **existence of parallel transport**. On a compact time interval `[a, b]`, for any prescribed initial vector `Vβ‚€` there is a coordinate vector field `V` along the coordinate curve `u` with `V a = Vβ‚€` that is parallel, -i.e. solves the first-order linear system `VΜ‡ = βˆ’Ξ“(uΜ‡, V)(u)` on `[a, b]`. +i.e. solves the first-order linear system `V' = βˆ’Ξ“(u', V)(u)` on `[a, b]`. This is the existence half of `prop:dc-ch2-2-6`, complementing the uniqueness half -`isParallelCoord_eqOn_Icc`. The parallelism system is the linear ODE `VΜ‡ = A(t) V` with -coefficient `A(t) = βˆ’chartChristoffelContractionRight g Ξ± (uΜ‡ t) (u t)`, and the solution is +`isParallelCoord_eqOn_Icc`. The parallelism system is the linear ODE `V' = A(t) V` with +coefficient `A(t) = βˆ’chartChristoffelContractionRight g Ξ± (u' t) (u t)`, and the solution is produced by the global linear-ODE existence theorem `Riemannian.LinearODE.exists_hasDerivWithinAt_Icc` (Picard–LindelΓΆf on short pieces, glued across a partition of `[a, b]`). The only hypotheses on the curve are that this coefficient is @@ -209,12 +216,13 @@ theorem exists_isParallelCoord_Icc (g : RiemannianMetric I M) (Ξ± : M) (u : ℝ have := hVd t ht rwa [hA, ContinuousLinearMap.neg_apply, chartChristoffelContractionRight_apply] at this +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 2, Prop. 2.6 (uniqueness half), interval-native form matching the existence output `exists_isParallelCoord_Icc`. Two vector fields solving the parallel-transport -ODE `VΜ‡ = βˆ’Ξ“(uΜ‡, V)(u)` on `[a, b]` (as `HasDerivWithinAt` on `Icc a b`, exactly the shape +ODE `V' = βˆ’Ξ“(u', V)(u)` on `[a, b]` (as `HasDerivWithinAt` on `Icc a b`, exactly the shape produced by existence) that agree at the left endpoint `a` agree on all of `[a, b]`. This is the specialization of the linear-ODE forward uniqueness `LinearODE.IsSolOn.eqOn_of_left` to the -coefficient `A(t) = βˆ’chartChristoffelContractionRight g Ξ± (uΜ‡ t) (u t)`, and complements the +coefficient `A(t) = βˆ’chartChristoffelContractionRight g Ξ± (u' t) (u t)`, and complements the global-`IsParallelCoord` uniqueness `isParallelCoord_eqOn_Icc`. -/ theorem isParallelSol_eqOn_Icc (g : RiemannianMetric I M) (Ξ± : M) (u : ℝ β†’ E) {a b : ℝ} {K : NNReal} @@ -251,7 +259,7 @@ theorem isParallelSol_eqOn_Icc (g : RiemannianMetric I M) (Ξ± : M) (u : ℝ β†’ at time `a` to the value at time `b` of the unique parallel coordinate vector field `V` along `u` with `V(a) = Vβ‚€`. It is a **linear isomorphism**: linearity and injectivity come from the linear-ODE flow (`LinearODE.flowMap`, `LinearODE.flowMap_injective`) β€” the parallelism system -`VΜ‡ = βˆ’Ξ“(uΜ‡, V)(u)` being first-order linear β€” and an injective linear endomorphism of the +`V' = βˆ’Ξ“(u', V)(u)` being first-order linear β€” and an injective linear endomorphism of the finite-dimensional model space `E` is automatically bijective. This is do Carmo's `P_c`. -/ noncomputable def parallelTransport (g : RiemannianMetric I M) (Ξ± : M) (u : ℝ β†’ E) {a b : ℝ} (hab : a ≀ b) {K : NNReal} @@ -267,9 +275,10 @@ noncomputable def parallelTransport (g : RiemannianMetric I M) (Ξ± : M) (u : ℝ exact LinearEquiv.ofInjectiveEndo (LinearODE.flowMap hab hcontA hKA) (LinearODE.flowMap_injective hab hcontA hKA) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The parallel transport `P_c Vβ‚€` (do Carmo Prop. 2.6) is realized by a genuine parallel coordinate vector field: there is a curve `V` along `u` with `V(a) = Vβ‚€`, -`V(b) = P_c Vβ‚€`, solving the parallelism ODE `VΜ‡ = βˆ’Ξ“(uΜ‡, V)(u)` on `[a, b]`. Existence of the +`V(b) = P_c Vβ‚€`, solving the parallelism ODE `V' = βˆ’Ξ“(u', V)(u)` on `[a, b]`. Existence of the parallel field with the two prescribed endpoint values, packaging `exists_isParallelCoord_Icc` with the flow definition of `parallelTransport`. -/ theorem exists_parallelTransport_spec (g : RiemannianMetric I M) (Ξ± : M) (u : ℝ β†’ E) @@ -305,18 +314,20 @@ coordinates, the right-hand side of property (c). -/ def chartCovariantDeriv (g : RiemannianMetric I M) (Ξ± : M) (v y : E) (Y : E β†’ E) : E := fderiv ℝ Y y v + Geodesic.chartChristoffelContraction (I := I) g Ξ± v (Y y) y +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] theorem chartCovariantDeriv_def (g : RiemannianMetric I M) (Ξ± : M) (v y : E) (Y : E β†’ E) : chartCovariantDeriv (I := I) g Ξ± v y Y = fderiv ℝ Y y v + Geodesic.chartChristoffelContraction (I := I) g Ξ± v (Y y) y := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 2, Prop. 2.2, **property (c)** in coordinates. When the vector field `V` along the curve `u` is *induced* by a coordinate field `Y : E β†’ E`, i.e. `V(t) = Y(u(t))`, its covariant derivative along `u` equals the coordinate covariant derivative of `Y` in the -direction `uΜ‡(t)`: -`D(Y∘u)/dt = (βˆ‡_{uΜ‡} Y)(u)`. +direction `u'(t)`: +`D(Y∘u)/dt = (βˆ‡_{u'} Y)(u)`. This is the substantive analytic content of property (c) β€” do Carmo's key step -`DX_j/dt = βˆ‡_{dc/dt} X_j` β€” obtained from the chain rule `d/dt Y(u(t)) = DY(u(t))Β·uΜ‡(t)`, which -turns the plain `VΜ‡` term of the covariant derivative into the directional-derivative term of +`DX_j/dt = βˆ‡_{dc/dt} X_j` β€” obtained from the chain rule `d/dt Y(u(t)) = DY(u(t))Β·u'(t)`, which +turns the plain `V'` term of the covariant derivative into the directional-derivative term of the connection while the Christoffel contraction matches on the nose. The one remaining ingredient of the full (manifold-level) property (c) is the identification of this coordinate `βˆ‡` with the abstract Levi-Civita connection, i.e. the chart-Christoffel bridge @@ -365,6 +376,7 @@ theorem sum4_swap24 {Ξ± : Type*} [AddCommMonoid Ξ±] {n : β„•} noncomputable def Geodesic.chartCoordFunctional (i : Fin (Module.finrank ℝ E)) : E β†’L[ℝ] ℝ := ((Module.finBasis ℝ E).coord i).toContinuousLinearMap +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] theorem Geodesic.chartCoordFunctional_apply (i : Fin (Module.finrank ℝ E)) (v : E) : Geodesic.chartCoordFunctional (E := E) i v = Geodesic.chartCoord (E := E) i v := by simp only [Geodesic.chartCoordFunctional, LinearMap.coe_toContinuousLinearMap', @@ -378,11 +390,13 @@ def chartMetricInner (g : RiemannianMetric I M) (Ξ± : M) (y a b : E) : ℝ := βˆ‘ i, βˆ‘ j, chartGramOnE (I := I) g Ξ± i j y * Geodesic.chartCoord (E := E) i a * Geodesic.chartCoord (E := E) j b +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] theorem chartMetricInner_def (g : RiemannianMetric I M) (Ξ± : M) (y a b : E) : chartMetricInner (I := I) g Ξ± y a b = βˆ‘ i, βˆ‘ j, chartGramOnE (I := I) g Ξ± i j y * Geodesic.chartCoord (E := E) i a * Geodesic.chartCoord (E := E) j b := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart Gram inner product is additive in its first vector argument. -/ theorem chartMetricInner_add_left (g : RiemannianMetric I M) (Ξ± : M) (y a a' b : E) : chartMetricInner (I := I) g Ξ± y (a + a') b @@ -391,6 +405,7 @@ theorem chartMetricInner_add_left (g : RiemannianMetric I M) (Ξ± : M) (y a a' b refine Finset.sum_congr rfl fun i _ => Finset.sum_congr rfl fun j _ => ?_ ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart Gram inner product is additive in its second vector argument. -/ theorem chartMetricInner_add_right (g : RiemannianMetric I M) (Ξ± : M) (y a b b' : E) : chartMetricInner (I := I) g Ξ± y a (b + b') @@ -399,6 +414,7 @@ theorem chartMetricInner_add_right (g : RiemannianMetric I M) (Ξ± : M) (y a b b' refine Finset.sum_congr rfl fun i _ => Finset.sum_congr rfl fun j _ => ?_ ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The `i`-th chart coordinate of the Christoffel contraction `Ξ“(v, w)(y)` is the bilinear expression `βˆ‘_{a,b} Ξ“^i_{ab}(y)\, v^a\, w^b`. -/ theorem chartCoord_chartChristoffelContraction (g : RiemannianMetric I M) (Ξ± : M) @@ -417,6 +433,7 @@ theorem chartCoord_chartChristoffelContraction (g : RiemannianMetric I M) (Ξ± : rw [Finset.sum_ite_eq' Finset.univ i] simp only [Finset.mem_univ, if_true] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Expansion of a directional derivative in the chart-model basis: `DG(y)Β·w = βˆ‘_k w^k\, βˆ‚_k G(y)`, the sum of partial derivatives weighted by the components of the direction `w`. -/ @@ -428,12 +445,13 @@ theorem fderiv_apply_eq_sum_partialDeriv (G : E β†’ ℝ) (y w : E) : rw [map_smul, smul_eq_mul] rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 2, Β§3, the algebraic heart of Prop. 3.2 (coordinate form): the direction-derivative of the chart Gram inner product, expanded through formula (10) `βˆ‡g = 0`, splits exactly into the two Christoffel-correction terms of the covariant derivative. For every base point `y` in the chart domain, -`βˆ‘_{i,j}(βˆ‘_k uΜ‡^k βˆ‚_k G_{ij})\, V^i W^j - = βŸ¨Ξ“(uΜ‡,V), W⟩_y + ⟨V, Ξ“(uΜ‡,W)⟩_y`. -/ +`βˆ‘_{i,j}(βˆ‘_k (u')^k βˆ‚_k G_{ij})\, V^i W^j + = βŸ¨Ξ“(u',V), W⟩_y + ⟨V, Ξ“(u',W)⟩_y`. -/ theorem chartMetricInner_gram_deriv_balance (g : RiemannianMetric I M) (Ξ± : M) (y ud Vv Ww : E) (hbase : (extChartAt I Ξ±).symm y ∈ (trivializationAt E (TangentSpace I) Ξ±).baseSet) : @@ -506,6 +524,7 @@ theorem chartMetricInner_gram_deriv_balance (g : RiemannianMetric I M) (Ξ± : M) Finset.sum_congr rfl fun a _ => Finset.sum_congr rfl fun b _ => ?_ ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 2, Β§3, Prop. 3.2 (coordinate form / do Carmo eq. (3)): the Levi-Civita covariant derivative along a curve is **compatible with the metric**. For a coordinate curve `u` staying in the chart domain and coordinate @@ -579,6 +598,7 @@ theorem hasDerivAt_chartMetricInner_along (g : RiemannianMetric I M) (Ξ± : M) rw [hGram, hbalance] ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 2, Β§3, Def. 3.1 (coordinate form): the Levi-Civita connection is **compatible with the metric** in do Carmo's original sense β€” any two **parallel** coordinate vector fields `V, W` along a curve `u` (in the chart domain, @@ -597,6 +617,7 @@ theorem hasDerivAt_chartMetricInner_eq_zero_of_isParallelCoord rw [hVp t, hWp t] simp [chartMetricInner_def] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 3, Β§2, the geodesic definition's **constant-speed** property. If `Ξ³` satisfies the geodesic equation at `t` β€” read in the moving-foot chart at `Ξ³ t` via `HasGeodesicEquationAt` β€” then the chart Gram squared speed @@ -652,18 +673,19 @@ theorem hasDerivAt_chartMetricInner_geodesic_speed_zero do Carmo's Proposition 2.2 asserts that the covariant derivative `D/dt` is the *unique* correspondence on vector fields along a curve satisfying (a) additivity, -(b) the Leibniz rule, and (c) the induced-field rule `D(Y∘u)/dt = (βˆ‡_{uΜ‡}Y)(u)`. The +(b) the Leibniz rule, and (c) the induced-field rule `D(Y∘u)/dt = (βˆ‡_{u'}Y)(u)`. The existence half is `covariantDerivCoord` together with `covariantDerivCoord_add` (a), `covariantDerivCoord_smul` (b) and `covariantDerivCoord_induced` (c). The theorem below is the uniqueness half: any operator `D` obeying (a), (b), (c) is forced to be `covariantDerivCoord`, which is do Carmo's formula (1). -/ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 2, Prop. 2.2 (uniqueness half / formula (1)). Let `D` be any operator sending a coordinate vector field along `u` to another such field, satisfying do Carmo's three axioms: * (a) additivity `D(V + W) = D V + D W`; -* (b) the Leibniz rule `D(f β€’ V) = ḟ β€’ V + f β€’ D V` for scalar `f : ℝ β†’ ℝ`; -* (c) the induced-field rule `D(Y ∘ u) = (βˆ‡_{uΜ‡} Y)(u) = chartCovariantDeriv`. +* (b) the Leibniz rule `D(f β€’ V) = f' β€’ V + f β€’ D V` for scalar `f : ℝ β†’ ℝ`; +* (c) the induced-field rule `D(Y ∘ u) = (βˆ‡_{u'} Y)(u) = chartCovariantDeriv`. Then `D V = covariantDerivCoord g Ξ± u V` for every differentiable `V`, i.e. `D` is forced to be the covariant derivative of formula (1). This is the uniqueness statement of do Carmo Prop. 2.2, obtained by expanding `V = βˆ‘_k V^k e_k` in the @@ -800,25 +822,25 @@ def IsMetricCompatibleCoord (g : RiemannianMetric I M) (Ξ± : M) : Prop := βˆ€ s t, chartMetricInner (I := I) g Ξ± (u s) (V s) (W s) = chartMetricInner (I := I) g Ξ± (u t) (V t) (W t) -/-! ## do Carmo Ch. 2, Β§3, Prop. 3.2: compatibility ⟺ the product rule +/-! ## do Carmo Ch. 2, Β§3, Prop. 3.2: compatibility ↔ the product rule do Carmo's Proposition 3.2 is the equivalence, for an affine connection `βˆ‡` on a Riemannian manifold, between metric compatibility (Def. 3.1: parallel fields have constant inner product) and the product rule (eq. (3), `d/dt⟨V,W⟩ = ⟨DV/dt,W⟩ + ⟨V,DW/dt⟩`). We record it abstractly in coordinates: a connection read along a curve is a continuous coefficient `A : ℝ β†’ E β†’L[ℝ] E` -(`DV/dt = VΜ‡ + A(t)V`), the metric read along the curve is a curve of bilinear forms +(`DV/dt = V' + A(t)V`), the metric read along the curve is a curve of bilinear forms `G : ℝ β†’ E β†’L[ℝ] E β†’L[ℝ] ℝ`, and the equivalence holds provided parallel transport is surjective onto each fibre (do Carmo Prop. 2.6, the hypothesis do Carmo's own proof invokes to build a parallel orthonormal frame). -/ /-- **Math.** General coordinate covariant derivative along a curve for a connection -coefficient `A : ℝ β†’ E β†’L[ℝ] E`: `DV/dt = VΜ‡(t) + A(t)Β·V(t)`. Specializes to -`covariantDerivCoord` for the Levi-Civita coefficient `A(t) = Ξ“(uΜ‡(t),Β·)(u(t))`. -/ +coefficient `A : ℝ β†’ E β†’L[ℝ] E`: `DV/dt = V'(t) + A(t)Β·V(t)`. Specializes to +`covariantDerivCoord` for the Levi-Civita coefficient `A(t) = Ξ“(u'(t),Β·)(u(t))`. -/ def covDerivGen (A : ℝ β†’ E β†’L[ℝ] E) (V : ℝ β†’ E) (t : ℝ) : E := deriv V t + A t (V t) /-- **Math.** do Carmo Def. 2.5 (general coefficient form). `V` is **parallel** for the -connection coefficient `A` when `VΜ‡ = βˆ’A V`, i.e. `DV/dt ≑ 0`. -/ +connection coefficient `A` when `V' = βˆ’A V`, i.e. `DV/dt ≑ 0`. -/ def IsParallelGen (A : ℝ β†’ E β†’L[ℝ] E) (V : ℝ β†’ E) : Prop := βˆ€ t, HasDerivAt V (-(A t) (V t)) t /-- **Math.** do Carmo Β§3, Def. 3.1 (general coefficient form). The connection `A` is @@ -836,9 +858,10 @@ def ProductRuleGen (A : ℝ β†’ E β†’L[ℝ] E) (G : ℝ β†’ E β†’L[ℝ] E β†’L[ βˆ€ t, HasDerivAt (fun s => G s (V s) (W s)) (G t (covDerivGen A V t) (W t) + G t (V t) (covDerivGen A W t)) t +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Product rule for the bilinear pairing `t ↦ G t (V t) (W t)` of a curve of bilinear forms `G` with two vector curves `V, W`: its derivative is -`Δ (V,W) + G(VΜ‡,W) + G(V,αΊ†)`, obtained by applying `HasDerivAt.clm_apply` twice. -/ +`G'(V,W) + G(V',W) + G(V,W')`, obtained by applying `HasDerivAt.clm_apply` twice. -/ theorem hasDerivAt_bilin_along (G : ℝ β†’ E β†’L[ℝ] E β†’L[ℝ] ℝ) (hG : Differentiable ℝ G) (V W : ℝ β†’ E) {t : ℝ} (hV : DifferentiableAt ℝ V t) (hW : DifferentiableAt ℝ W t) : HasDerivAt (fun s => G s (V s) (W s)) @@ -849,14 +872,15 @@ theorem hasDerivAt_bilin_along (G : ℝ β†’ E β†’L[ℝ] E β†’L[ℝ] ℝ) (hG : D simpa only [ContinuousLinearMap.add_apply, add_assoc] using h2 /-- **Math.** The pointwise metric-connection compatibility identity -`Δ (a,b) = G(A a, b) + G(a, A b)`, do Carmo's coordinate form of `βˆ‡g = 0`. Both metric +`G'(a,b) = G(A a, b) + G(a, A b)`, do Carmo's coordinate form of `βˆ‡g = 0`. Both metric compatibility (Def. 3.1) and the product rule (eq. (3)) are equivalent to this. -/ def PointwiseCompatGen (A : ℝ β†’ E β†’L[ℝ] E) (G : ℝ β†’ E β†’L[ℝ] E β†’L[ℝ] ℝ) : Prop := βˆ€ t a b, deriv G t a b = G t (A t a) b + G t a (A t b) +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The product rule (eq. (3)) is equivalent to the pointwise compatibility -identity `Δ (a,b) = G(Aa,b) + G(a,Ab)`: the derivative of `G(V,W)` computed by -`hasDerivAt_bilin_along` matches `G(DV,W) + G(V,DW)` iff the `Δ ` term equals the two +identity `G'(a,b) = G(Aa,b) + G(a,Ab)`: the derivative of `G(V,W)` computed by +`hasDerivAt_bilin_along` matches `G(DV,W) + G(V,DW)` iff the `G'` term equals the two Christoffel terms, tested against constant fields to reach every pair `(a,b)`. -/ theorem productRuleGen_iff_pointwise (A : ℝ β†’ E β†’L[ℝ] E) (G : ℝ β†’ E β†’L[ℝ] E β†’L[ℝ] ℝ) (hG : Differentiable ℝ G) : @@ -885,11 +909,12 @@ theorem productRuleGen_iff_pointwise (A : ℝ β†’ E β†’L[ℝ] E) (G : ℝ β†’ E rw [h] ring +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Metric compatibility (Def. 3.1) is equivalent to the pointwise identity, given surjectivity of parallel transport onto each fibre (do Carmo Prop. 2.6): every value `a` at every time `t` is realized by a parallel field. The forward direction is do Carmo's argument that constancy of `G(P,P')` along parallel `P, P'` forces -`Δ  = G(AΒ·,Β·) + G(Β·,AΒ·)`; the reverse says a vanishing derivative gives constancy. -/ +`G' = G(AΒ·,Β·) + G(Β·,AΒ·)`; the reverse says a vanishing derivative gives constancy. -/ theorem compatibleGen_iff_pointwise (A : ℝ β†’ E β†’L[ℝ] E) (G : ℝ β†’ E β†’L[ℝ] E β†’L[ℝ] ℝ) (hG : Differentiable ℝ G) (hpar : βˆ€ t a, βˆƒ P, IsParallelGen A P ∧ P t = a) : @@ -929,6 +954,7 @@ theorem compatibleGen_iff_pointwise (A : ℝ β†’ E β†’L[ℝ] E) (G : ℝ β†’ E is_const_of_deriv_eq_zero hdiff (fun r => (hderiv0 r).deriv) s t exact this +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 2, Β§3, Prop. 3.2 (coordinate form). A connection `A` on a Riemannian manifold, read along curves, is **compatible with the metric** `G` (Def. 3.1: parallel fields have constant inner product) **if and only if** the diff --git a/OpenGALib/Riemannian/Geodesic/DataTransfer.lean b/OpenGALib/Riemannian/Geodesic/DataTransfer.lean index aa29f150..4134befd 100644 --- a/OpenGALib/Riemannian/Geodesic/DataTransfer.lean +++ b/OpenGALib/Riemannian/Geodesic/DataTransfer.lean @@ -21,7 +21,6 @@ forms consumed by the Hopf–Rinow endpoint-continuity argument: containing the limit foot converge as well. -/ -set_option linter.unusedSectionVars false noncomputable section @@ -32,11 +31,12 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Chart-to-chart transfer of the geodesic velocity reading.** If `Οƒ` solves the geodesic equation at `t` and its foot `Οƒ t` lies in the charts at `Ξ±` and at `Ξ²`, then the Ξ²-chart velocity reading is the tangent coordinate @@ -56,6 +56,7 @@ theorem HasGeodesicEquationAt.deriv_extChartAt_transfer rw [h.deriv_extChartAt_eq hcont hΞ², h.deriv_extChartAt_eq hcont hΞ±, tangentCoordChange_comp (I := I) ⟨⟨hself, hΞ±'⟩, hΞ²'⟩] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** **Joint sequential continuity of the tangent coordinate change.** If the feet `zs n` converge to a foot `x` lying in the charts at `Ξ±` and at `Ξ²`, and the vectors `us n` converge to `u`, then the coordinate changes @@ -78,6 +79,7 @@ theorem tendsto_tangentCoordChange_of_tendsto {Ξ± Ξ² : M} exact (isBoundedBilinearMap_apply.continuous.tendsto (tangentCoordChange I Ξ± Ξ² x, u)).comp (hA.prodMk_nhds hus) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Transfer of velocity convergence between charts.** If a sequence of geodesics at time `t` has feet converging to the foot of a limit geodesic and Ξ±-chart velocity readings converging to the limit's Ξ±-chart diff --git a/OpenGALib/Riemannian/Geodesic/EndpointContinuity.lean b/OpenGALib/Riemannian/Geodesic/EndpointContinuity.lean index 3546a2b8..ed53a671 100644 --- a/OpenGALib/Riemannian/Geodesic/EndpointContinuity.lean +++ b/OpenGALib/Riemannian/Geodesic/EndpointContinuity.lean @@ -49,7 +49,6 @@ noncomputable section open Bundle Manifold Set Filter Metric open scoped Manifold Topology ContDiff NNReal -set_option linter.unusedSectionVars false namespace Riemannian @@ -58,13 +57,14 @@ namespace Geodesic open Riemannian.Exponential variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] variable {M' : Type*} [MetricSpace M'] [ChartedSpace H M'] [IsManifold I ∞ M'] variable [T2Space (TangentBundle I M')] +omit [T2Space (TangentBundle I M')] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** A curve satisfying the geodesic equation at `t` has an honest chart-`Ξ²` velocity at `t` (the `deriv` is a `HasDerivAt`). -/ theorem HasGeodesicEquationAt.hasDerivAt_extChartAt_deriv @@ -82,24 +82,21 @@ theorem HasGeodesicEquationAt.hasDerivAt_extChartAt_deriv section Step -variable {g : RiemannianMetric I M'} - -/- The chart-to-chart transfer of velocity convergence used by the step lemma -is the real, sorry-free `tendsto_deriv_extChartAt_transfer` of `DataTransfer.lean` -(imported above); the earlier temporary stub has been removed. -/ +/- The step lemma uses `tendsto_deriv_extChartAt_transfer` from +`DataTransfer.lean` to transfer velocity convergence between charts. -/ -set_option linter.unusedVariables false in /-- **Math.** The convergence invariant of the flow-box chaining: positions and chart-at-the-limit-point velocities of the sequence converge to those of -the limit geodesic at time `t`. (The metric `g` is carried for the sake of -the statement's meaning β€” the invariant is about geodesics of `g` β€” even -though the formula does not mention it.) -/ -def ConvAt (g : RiemannianMetric I M') (Ξ³ : ℝ β†’ M') (Ξ³s : β„• β†’ ℝ β†’ M') +the limit geodesic at time `t`. -/ +def ConvAt (Ξ³ : ℝ β†’ M') (Ξ³s : β„• β†’ ℝ β†’ M') (t : ℝ) : Prop := Tendsto (fun n => Ξ³s n t) atTop (𝓝 (Ξ³ t)) ∧ Tendsto (fun n => deriv (fun Ο„ => extChartAt I (Ξ³ t) (Ξ³s n Ο„)) t) atTop (𝓝 (deriv (fun Ο„ => extChartAt I (Ξ³ t) (Ξ³ Ο„)) t)) +variable {g : RiemannianMetric I M'} + +omit [NormedSpace ℝ E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Flow evaluations converge along converging data and times.** If a local flow `Z` is Lipschitz in the initial condition uniformly in time on `closedBall c r Γ— [-Ξ΅, Ξ΅]`, its line at the limit datum `z` is continuous @@ -141,6 +138,7 @@ theorem tendsto_flow_eval {r Ξ΅ : ℝ} {Z : E Γ— E β†’ ℝ β†’ E Γ— E} {L : ℝ simpa using (h1.const_mul (L : ℝ)).add h2' exact squeeze_zero' (Eventually.of_forall fun n => dist_nonneg) hbound hlim +omit [T2Space (TangentBundle I M')] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Affine readback of a global geodesic from the uniform flow.** Let `Z` be a uniform local flow of the chart-`x` coordinate spray (flow clauses as produced by `exists_uniform_geodesic_flow`), `0 < T < Ξ΅`, and let @@ -229,6 +227,7 @@ theorem IsGeodesic.eq_uniform_flow_readback_affine simp only [Function.comp_apply, hΟƒ'def, this] rwa [hfun] at hcomp +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The flow-box step, moving-time version**: around every base time `t✢` there is a radius `ρ > 0` such that the convergence invariant `ConvAt` at any time `t` of the `ρ`-interval around `t✢` propagates to every @@ -241,12 +240,12 @@ theorem exists_conv_step_eval (g : RiemannianMetric I M') {Ξ³ : ℝ β†’ M'} (hΞ³geo : IsGeodesic (I := I) g Ξ³) (hΞ³c : Continuous Ξ³) {Ξ³s : β„• β†’ ℝ β†’ M'} (hgeo : βˆ€ n, IsGeodesic (I := I) g (Ξ³s n)) (hc : βˆ€ n, Continuous (Ξ³s n)) (tstar : ℝ) : - βˆƒ ρ : ℝ, 0 < ρ ∧ βˆ€ t : ℝ, |t - tstar| ≀ ρ β†’ ConvAt (I := I) g Ξ³ Ξ³s t β†’ + βˆƒ ρ : ℝ, 0 < ρ ∧ βˆ€ t : ℝ, |t - tstar| ≀ ρ β†’ ConvAt (I := I) Ξ³ Ξ³s t β†’ βˆ€ (us : β„• β†’ ℝ) (uβ‚€ : ℝ), |uβ‚€ - tstar| ≀ ρ β†’ (βˆ€αΆ  n in Filter.atTop, |us n - tstar| ≀ ρ) β†’ Filter.Tendsto us Filter.atTop (𝓝 uβ‚€) β†’ Filter.Tendsto (fun n => Ξ³s n (us n)) Filter.atTop (𝓝 (Ξ³ uβ‚€)) ∧ - ConvAt (I := I) g Ξ³ Ξ³s uβ‚€ := by + ConvAt (I := I) Ξ³ Ξ³s uβ‚€ := by classical set x : M' := Ξ³ tstar with hxdef -- the uniform flow box at the base point @@ -611,6 +610,7 @@ theorem exists_conv_step_eval (g : RiemannianMetric I M') (fun n => (hgeo n) uβ‚€) (fun n => (hc n).continuousAt) (hΞ³geo uβ‚€) hΞ³c.continuousAt hsrc_uβ‚€ (mem_chart_source H (Ξ³ uβ‚€)) hpos_uβ‚€ hvelx_uβ‚€ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The flow-box step**: around every base time `t✢` there is a radius `ρ > 0` such that the convergence invariant `ConvAt` propagates from any time `t` to any time `u` in the `ρ`-interval around `t✢`. See the module @@ -620,7 +620,7 @@ theorem exists_conv_step (g : RiemannianMetric I M') {Ξ³s : β„• β†’ ℝ β†’ M'} (hgeo : βˆ€ n, IsGeodesic (I := I) g (Ξ³s n)) (hc : βˆ€ n, Continuous (Ξ³s n)) (tstar : ℝ) : βˆƒ ρ : ℝ, 0 < ρ ∧ βˆ€ t u : ℝ, |t - tstar| ≀ ρ β†’ |u - tstar| ≀ ρ β†’ - ConvAt (I := I) g Ξ³ Ξ³s t β†’ ConvAt (I := I) g Ξ³ Ξ³s u := by + ConvAt (I := I) Ξ³ Ξ³s t β†’ ConvAt (I := I) Ξ³ Ξ³s u := by obtain ⟨ρ, hρ, hstep⟩ := exists_conv_step_eval (I := I) g hΞ³geo hΞ³c hgeo hc tstar exact ⟨ρ, hρ, fun t u ht hu hconv => diff --git a/OpenGALib/Riemannian/Geodesic/EndpointContinuityGlobal.lean b/OpenGALib/Riemannian/Geodesic/EndpointContinuityGlobal.lean index 051722cb..e0dc7f58 100644 --- a/OpenGALib/Riemannian/Geodesic/EndpointContinuityGlobal.lean +++ b/OpenGALib/Riemannian/Geodesic/EndpointContinuityGlobal.lean @@ -37,7 +37,6 @@ noncomputable section open Bundle Manifold Set Filter Metric open scoped Manifold Topology ContDiff -set_option linter.unusedSectionVars false namespace Riemannian @@ -46,13 +45,14 @@ namespace Geodesic open Riemannian.Exponential variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] variable {M' : Type*} [MetricSpace M'] [ChartedSpace H M'] [IsManifold I ∞ M'] variable [T2Space (TangentBundle I M')] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Endpoint continuity of geodesics in their initial data** (do Carmo Ch. 7, proof of Theorem 2.8, f) ⟹ b)): if the global geodesics `Ξ³β‚™` and `Ξ³` all start at `p`, the initial chart velocities converge @@ -75,7 +75,7 @@ theorem tendsto_geodesic_eval_of_tendsto_initialData (g : RiemannianMetric I M') subst hΞ³0 -- base case: the invariant holds at time `0` β€” positions are constantly -- `Ξ³ 0`, and the chart velocities at `0` converge by hypothesis - have hbase : ConvAt (I := I) g Ξ³ Ξ³s 0 := by + have hbase : ConvAt (I := I) Ξ³ Ξ³s 0 := by constructor Β· simp only [h0] exact tendsto_const_nhds @@ -84,21 +84,21 @@ theorem tendsto_geodesic_eval_of_tendsto_initialData (g : RiemannianMetric I M') rw [hseq, hΞ³v.deriv] exact hvs -- clopen globalization: the invariant holds at every time - have hall : βˆ€ t : ℝ, ConvAt (I := I) g Ξ³ Ξ³s t := by - have hopen : IsOpen {t : ℝ | ConvAt (I := I) g Ξ³ Ξ³s t} := by + have hall : βˆ€ t : ℝ, ConvAt (I := I) Ξ³ Ξ³s t := by + have hopen : IsOpen {t : ℝ | ConvAt (I := I) Ξ³ Ξ³s t} := by rw [Metric.isOpen_iff] intro t ht obtain ⟨ρ, hρ, hstep⟩ := exists_conv_step (I := I) g hΞ³geo hΞ³c hgeo hc t refine ⟨ρ, hρ, fun u hu => ?_⟩ rw [Metric.mem_ball, Real.dist_eq] at hu exact hstep t u (by simpa using hρ.le) hu.le ht - have hclosed : IsClosed {t : ℝ | ConvAt (I := I) g Ξ³ Ξ³s t} := by + have hclosed : IsClosed {t : ℝ | ConvAt (I := I) Ξ³ Ξ³s t} := by refine isClosed_of_closure_subset fun t ht => ?_ obtain ⟨ρ, hρ, hstep⟩ := exists_conv_step (I := I) g hΞ³geo hΞ³c hgeo hc t obtain ⟨t', ht'S, ht'd⟩ := Metric.mem_closure_iff.mp ht ρ hρ rw [Real.dist_eq, abs_sub_comm] at ht'd exact hstep t' t ht'd.le (by simpa using hρ.le) ht'S - have huniv : {t : ℝ | ConvAt (I := I) g Ξ³ Ξ³s t} = Set.univ := + have huniv : {t : ℝ | ConvAt (I := I) Ξ³ Ξ³s t} = Set.univ := IsClopen.eq_univ ⟨hclosed, hopen⟩ ⟨0, hbase⟩ exact fun t => Set.eq_univ_iff_forall.mp huniv t -- moving-time finish: the flow-box estimate at `tβ‚€` evaluates the tail diff --git a/OpenGALib/Riemannian/Geodesic/Equation.lean b/OpenGALib/Riemannian/Geodesic/Equation.lean index 68751902..9317e865 100644 --- a/OpenGALib/Riemannian/Geodesic/Equation.lean +++ b/OpenGALib/Riemannian/Geodesic/Equation.lean @@ -4,7 +4,6 @@ import Mathlib.Geometry.Manifold.IntegralCurve.Transform import Mathlib.Analysis.Calculus.Deriv.Add import Mathlib.Analysis.Calculus.Deriv.Shift -set_option linter.unusedSectionVars false /-! # Geodesic equation in chart coordinates @@ -76,7 +75,7 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] @@ -86,17 +85,21 @@ to the canonical chart-model basis `Module.finBasis ℝ E`. -/ def chartCoord (i : Fin (Module.finrank ℝ E)) (v : E) : ℝ := (Module.finBasis ℝ E).repr v i +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma chartCoord_def (i : Fin (Module.finrank ℝ E)) (v : E) : chartCoord (E := E) i v = (Module.finBasis ℝ E).repr v i := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in lemma chartCoord_smul (i : Fin (Module.finrank ℝ E)) (a : ℝ) (v : E) : chartCoord (E := E) i (a β€’ v) = a * chartCoord (E := E) i v := by simp [chartCoord, map_smul] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in lemma chartCoord_zero (i : Fin (Module.finrank ℝ E)) : chartCoord (E := E) i (0 : E) = 0 := by simp [chartCoord] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in lemma chartCoord_add (i : Fin (Module.finrank ℝ E)) (v w : E) : chartCoord (E := E) i (v + w) = chartCoord (E := E) i v + chartCoord (E := E) i w := by simp [chartCoord, map_add] @@ -114,6 +117,7 @@ def chartChristoffelContraction (g : RiemannianMetric I M) (Ξ± : M) chartCoord (E := E) i v * chartCoord (E := E) j w) β€’ Module.finBasis ℝ E k +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma chartChristoffelContraction_def (g : RiemannianMetric I M) (Ξ± : M) (v w : E) (y : E) : chartChristoffelContraction (I := I) g Ξ± v w y = @@ -123,6 +127,7 @@ def chartChristoffelContraction (g : RiemannianMetric I M) (Ξ± : M) chartCoord (E := E) i v * chartCoord (E := E) j w) β€’ Module.finBasis ℝ E k := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The Christoffel contraction is symmetric in its vector arguments, inherited from the symmetry of `chartChristoffel` in its lower indices. -/ lemma chartChristoffelContraction_symm @@ -142,6 +147,7 @@ lemma chartChristoffelContraction_symm rw [chartChristoffel_symm (I := I) g Ξ± j i k y] ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Linearity of the Christoffel contraction in its first argument. -/ lemma chartChristoffelContraction_zero_left (g : RiemannianMetric I M) (Ξ± : M) (w : E) (y : E) : @@ -160,6 +166,7 @@ lemma chartChristoffelContraction_zero_left simp rw [this, zero_smul] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The Christoffel contraction scales like a `(2, 0)`-tensor on its vector slots: `Ξ“(a v, a v)(y) = a^2 Β· Ξ“(v, v)(y)`. -/ lemma chartChristoffelContraction_smul_smul @@ -192,6 +199,7 @@ lemma chartChristoffelContraction_smul_smul intro j _ ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The Christoffel contraction is even in its (repeated) velocity slot: negating the velocity vector leaves `Ξ“(v, v)(y)` unchanged. This is the key sign cancellation behind time-reversal invariance of the geodesic @@ -204,6 +212,7 @@ lemma chartChristoffelContraction_neg rw [hneg, chartChristoffelContraction_smul_smul (I := I) g Ξ± (-1 : ℝ) v y] norm_num +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Additivity of the Christoffel contraction in its second vector slot: `Ξ“(u, v + w)(y) = Ξ“(u, v)(y) + Ξ“(u, w)(y)`. -/ lemma chartChristoffelContraction_add_right (g : RiemannianMetric I M) (Ξ± : M) @@ -224,6 +233,7 @@ lemma chartChristoffelContraction_add_right (g : RiemannianMetric I M) (Ξ± : M) rw [chartCoord_add] ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Homogeneity of the Christoffel contraction in its second vector slot: `Ξ“(u, a β€’ w)(y) = a β€’ Ξ“(u, w)(y)`. -/ lemma chartChristoffelContraction_smul_right (g : RiemannianMetric I M) (Ξ± : M) @@ -253,6 +263,7 @@ def geodesicVectorField (g : RiemannianMetric I M) (p.2, - chartChristoffelContraction (I := I) g p.proj p.2 p.2 (extChartAt I p.proj p.proj)) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Unfolding lemma for `geodesicVectorField`. -/ @[simp] lemma geodesicVectorField_def (g : RiemannianMetric I M) (p : TangentBundle I M) : @@ -260,12 +271,14 @@ def geodesicVectorField (g : RiemannianMetric I M) (p.2, - chartChristoffelContraction (I := I) g p.proj p.2 p.2 (extChartAt I p.proj p.proj)) := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** First component: the projection of `geodesicVectorField` onto the horizontal `T_Ξ± M` factor returns the fibre coordinate of `p`. -/ @[simp] lemma geodesicVectorField_fst (g : RiemannianMetric I M) (p : TangentBundle I M) : (geodesicVectorField (I := I) g p).1 = p.2 := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Second component: the projection onto the vertical factor returns `-Ξ“(p.proj)(p.2, p.2)(Ο†_{p.proj}(p.proj))`. -/ @[simp] lemma geodesicVectorField_snd @@ -274,6 +287,7 @@ horizontal `T_Ξ± M` factor returns the fibre coordinate of `p`. -/ - chartChristoffelContraction (I := I) g p.proj p.2 p.2 (extChartAt I p.proj p.proj) := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** At the zero section, the geodesic vector field reduces to the zero vector in the vertical factor. The horizontal factor is still zero because the fibre coordinate at the zero section is zero. -/ @@ -305,11 +319,13 @@ This is the common coordinate map underlying both `geodesicVectorField` def geodesicSprayCoord (g : RiemannianMetric I M) (Ξ± : M) (x v : E) : E Γ— E := (v, - chartChristoffelContraction (I := I) g Ξ± v v x) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma geodesicSprayCoord_def (g : RiemannianMetric I M) (Ξ± : M) (x v : E) : geodesicSprayCoord (I := I) g Ξ± x v = (v, - chartChristoffelContraction (I := I) g Ξ± v v x) := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The moving-chart geodesic vector field is the spray coordinate map read at the foot point's own chart. -/ lemma geodesicVectorField_eq_sprayCoord @@ -318,6 +334,7 @@ lemma geodesicVectorField_eq_sprayCoord geodesicSprayCoord (I := I) g p.proj (extChartAt I p.proj p.proj) p.2 := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Degree-2 fibre homogeneity of the geodesic spray.** Scaling the velocity coordinate by `a` scales the horizontal component linearly and the vertical (acceleration) component quadratically: @@ -332,6 +349,7 @@ lemma geodesicSprayCoord_smul_velocity rw [chartChristoffelContraction_smul_smul (I := I) g Ξ± a v x] simp [smul_neg] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Degree-2 fibre homogeneity for the moving-chart geodesic vector field: scaling the fibre vector of `p` by `a` (keeping the foot fixed) scales the horizontal component linearly and the vertical component by `aΒ²`. -/ @@ -351,6 +369,7 @@ point traversed at time `t`. -/ def chartLocalCurve (Ξ³ : ℝ β†’ M) (t : ℝ) : ℝ β†’ E := fun s => extChartAt I (Ξ³ t) (Ξ³ s) +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in @[simp] lemma chartLocalCurve_def (Ξ³ : ℝ β†’ M) (t s : ℝ) : chartLocalCurve (I := I) Ξ³ t s = extChartAt I (Ξ³ t) (Ξ³ s) := rfl @@ -375,6 +394,7 @@ def HasGeodesicEquationAt (g : RiemannianMetric I M) (Ξ³ : ℝ β†’ M) def chartFiberCoord (Ξ± : M) (p : TangentBundle I M) : E := (trivializationAt E (TangentSpace I) Ξ± p).2 +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma chartFiberCoord_def (Ξ± : M) (p : TangentBundle I M) : chartFiberCoord (I := I) Ξ± p = (trivializationAt E (TangentSpace I) Ξ± p).2 := rfl @@ -390,6 +410,7 @@ def geodesicVectorFieldChartFiber (g : RiemannianMetric I M) (Ξ± : M) (v, - chartChristoffelContraction (I := I) g Ξ± v v (extChartAt I Ξ± p.proj)) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma geodesicVectorFieldChartFiber_def (g : RiemannianMetric I M) (Ξ± : M) (p : TangentBundle I M) : geodesicVectorFieldChartFiber (I := I) g Ξ± p = @@ -397,6 +418,7 @@ def geodesicVectorFieldChartFiber (g : RiemannianMetric I M) (Ξ± : M) (v, - chartChristoffelContraction (I := I) g Ξ± v v (extChartAt I Ξ± p.proj)) := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The fixed-chart-`Ξ±` geodesic vector field fibre is the spray coordinate map read at the chart image of the foot and the chart-`Ξ±` fibre coordinate. Together with `geodesicSprayCoord_smul_velocity`, this gives the degree-2 @@ -426,18 +448,22 @@ projection. -/ def geodesicChartDomain (Ξ± : M) : Set (TangentBundle I M) := (Bundle.TotalSpace.proj : TangentBundle I M β†’ M) ⁻¹' (chartAt H Ξ±).source +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in lemma geodesicChartDomain_isOpen (Ξ± : M) : IsOpen (geodesicChartDomain (I := I) (M := M) Ξ±) := (chartAt H Ξ±).open_source.preimage (FiberBundle.continuous_proj E (TangentSpace I)) +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in lemma mem_geodesicChartDomain_of_proj {Ξ± : M} {p : TangentBundle I M} (hp : p.proj ∈ (chartAt H Ξ±).source) : p ∈ geodesicChartDomain (I := I) Ξ± := hp +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in lemma proj_mem_chartAt_source_of_mem_geodesicChartDomain {Ξ± : M} {p : TangentBundle I M} (hp : p ∈ geodesicChartDomain (I := I) Ξ±) : p.proj ∈ (chartAt H Ξ±).source := hp +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart-Ξ± domain coincides with the base set of the trivialisation of `T(TM)` at `⟨α, 0⟩`: both are the set of `p : TM` with `p.proj` in `(chartAt H Ξ±).source`. -/ @@ -454,6 +480,7 @@ lemma geodesicChartDomain_eq_trivBaseSet (Ξ± : M) : exact (TangentBundle.mem_chart_source_iff (I := I) (M := M) p (⟨α, (0 : E)⟩ : TangentBundle I M)).symm +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** At the zero section, `chartFiberCoord Ξ± ⟨α, 0⟩ = 0`: the fibre coordinate in the chart at `Ξ±` of the zero vector at `Ξ±` is the zero of `E`. -/ lemma chartFiberCoord_self_zero (Ξ± : M) : @@ -469,6 +496,7 @@ lemma chartFiberCoord_self_zero (Ξ± : M) : (⟨α, (0 : TangentSpace I Ξ±)⟩ : TangentBundle I M)).2 = 0 rw [hzero'] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart-fixed geodesic vector field at `⟨α, 0⟩` (chart basepoint = foot point, zero velocity) is the zero element of `TangentSpace I.tangent ⟨α, 0⟩`. -/ lemma geodesicVectorFieldChart_zero_section @@ -528,6 +556,7 @@ so it remains meaningful for geodesics leaving any single chart. -/ def IsGeodesic (g : RiemannianMetric I M) (Ξ³ : ℝ β†’ M) : Prop := βˆ€ t : ℝ, HasGeodesicEquationAt (I := I) g Ξ³ t +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** A global geodesic satisfies the moving-foot geodesic equation at every time (definitional projection). -/ lemma IsGeodesic.hasGeodesicEquationAt {g : RiemannianMetric I M} @@ -542,6 +571,7 @@ def IsGeodesicOn (g : RiemannianMetric I M) (Ξ³ : ℝ β†’ M) (s : Set ℝ) : Prop := βˆ€ t ∈ s, HasGeodesicEquationAt (I := I) g Ξ³ t +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** A geodesic on a set satisfies the moving-foot geodesic equation at every time of the set (definitional projection). -/ lemma IsGeodesicOn.hasGeodesicEquationAt {g : RiemannianMetric I M} @@ -550,6 +580,7 @@ lemma IsGeodesicOn.hasGeodesicEquationAt {g : RiemannianMetric I M} HasGeodesicEquationAt (I := I) g Ξ³ t := hΞ³ t ht +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** `IsGeodesicOn` is monotone in the set. -/ lemma IsGeodesicOn.mono {g : RiemannianMetric I M} {Ξ³ : ℝ β†’ M} {s s' : Set ℝ} @@ -557,12 +588,14 @@ lemma IsGeodesicOn.mono {g : RiemannianMetric I M} IsGeodesicOn (I := I) g Ξ³ s' := fun t ht => hΞ³ t (hs ht) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** A global geodesic, restricted to any set, is a geodesic on that set. -/ lemma IsGeodesic.isGeodesicOn {g : RiemannianMetric I M} {Ξ³ : ℝ β†’ M} (hΞ³ : IsGeodesic (I := I) g Ξ³) (s : Set ℝ) : IsGeodesicOn (I := I) g Ξ³ s := fun t _ => hΞ³ t +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The constant curve `fun _ => p` is a geodesic. In the chart at `p`, the chart-local curve `s ↦ Ο†_p p` is constant, so both its velocity and acceleration vanish, and the Christoffel contraction of the zero velocity @@ -587,6 +620,7 @@ theorem isGeodesic_const (g : RiemannianMetric I M) (p : M) : Β· rw [chartChristoffelContraction_zero_left] simp +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** A constant curve is a local geodesic at every time (spray formulation). The constant lift `fun _ => ⟨p, 0⟩` is an integral curve of the chart-fixed geodesic vector field, which vanishes at the zero section. -/ @@ -598,6 +632,7 @@ theorem IsGeodesicAt.const (g : RiemannianMetric I M) (p : M) (t : ℝ) : refine (isMIntegralCurve_const ?_).isMIntegralCurveAt t exact geodesicVectorFieldChart_zero_section (I := I) g p +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Time-translation reparametrisation preserves the geodesic property. At time `t`, the chart-local curve of `s ↦ Ξ³ (s + b)` is the chart-local curve of `Ξ³` at the shifted base time `t + b`, precomposed with the shift @@ -641,6 +676,7 @@ theorem isGeodesic_comp_add exact ha.comp_add_const t b Β· exact hgeo +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in /-- **Math.** The chart-local curve of the time-reversed curve `s ↦ Ξ³ (-s)` at base time `Ο„` equals the chart-local curve of `Ξ³` at the reflected base time `-Ο„`, precomposed with negation: `chartLocalCurve (Ξ³ ∘ neg) Ο„ = u ∘ neg` @@ -649,6 +685,7 @@ lemma chartLocalCurve_comp_neg (Ξ³ : ℝ β†’ M) (Ο„ : ℝ) : chartLocalCurve (I := I) (fun s => Ξ³ (-s)) Ο„ = (fun s => chartLocalCurve (I := I) Ξ³ (-Ο„) (-s)) := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Pointwise time-reversal of the geodesic equation.** If `Ξ³` satisfies the moving-foot geodesic equation at `-Ο„`, then the time-reversed curve `s ↦ Ξ³ (-s)` satisfies it at `Ο„`. The reversed-curve velocity is the @@ -689,6 +726,7 @@ theorem hasGeodesicEquationAt_comp_neg Β· rw [chartChristoffelContraction_neg (I := I) g _ v] exact hgeo +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Time-reversal of a global geodesic.** If `Ξ³` is a geodesic, so is its time reversal `s ↦ Ξ³ (-s)`. -/ theorem isGeodesic_comp_neg @@ -698,6 +736,7 @@ theorem isGeodesic_comp_neg intro Ο„ exact hasGeodesicEquationAt_comp_neg (I := I) (hΞ³ (-Ο„)) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Time-reversal of a geodesic on a set.** If `Ξ³` is a geodesic on `s : Set ℝ`, then the time reversal `t ↦ Ξ³ (-t)` is a geodesic on the preimage `Neg.neg ⁻¹' s = {Ο„ | -Ο„ ∈ s}`. -/ @@ -708,6 +747,7 @@ theorem isGeodesicOn_comp_neg intro Ο„ hΟ„ exact hasGeodesicEquationAt_comp_neg (I := I) (hΞ³ (-Ο„) hΟ„) +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in /-- **Math.** The chart-local curve of the affinely rescaled curve `s ↦ Ξ³ (aΒ·s)` at base time `Ο„` equals the chart-local curve of `Ξ³` at the rescaled base time `aΒ·Ο„`, precomposed with multiplication by `a`. Holds definitionally, since @@ -717,6 +757,7 @@ lemma chartLocalCurve_comp_mul_left (Ξ³ : ℝ β†’ M) (a Ο„ : ℝ) : chartLocalCurve (I := I) (fun s => Ξ³ (a * s)) Ο„ = (fun s => chartLocalCurve (I := I) Ξ³ (a * Ο„) (a * s)) := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Pointwise affine rescaling of the geodesic equation (do Carmo Ch. 3, Lemma 2.6, core).** If `Ξ³` satisfies the moving-foot geodesic equation at `aΒ·Ο„`, then the rescaled curve `s ↦ Ξ³ (aΒ·s)` satisfies it at `Ο„`. The @@ -759,6 +800,7 @@ theorem hasGeodesicEquationAt_comp_mul_left rw [chartChristoffelContraction_smul_smul (I := I) g (Ξ³ (a * Ο„)) a v, ← smul_add, hgeo, smul_zero] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Affine rescaling of a global geodesic.** If `Ξ³` is a geodesic, so is its affine reparametrisation `s ↦ Ξ³ (aΒ·s)` for any `a : ℝ`. Together with the velocity scaling `(Ξ³ ∘ (aΒ·))'(t) = a Β· Ξ³'(a t)`, this is do Carmo's @@ -770,6 +812,7 @@ theorem isGeodesic_comp_mul_left intro Ο„ exact hasGeodesicEquationAt_comp_mul_left (I := I) (hΞ³ (a * Ο„)) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Affine rescaling of a geodesic on a set.** If `Ξ³` is a geodesic on `s : Set ℝ`, then `t ↦ Ξ³ (aΒ·t)` is a geodesic on the preimage `(a * Β·) ⁻¹' s = {Ο„ | aΒ·Ο„ ∈ s}`. -/ @@ -784,6 +827,7 @@ section ChartFixedSmoothness variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The trivialisation source is the preimage of the chart base set under the projection. Specialised to the tangent bundle at `Ξ±`. -/ lemma trivializationAt_source_eq (Ξ± : M) : @@ -791,6 +835,7 @@ lemma trivializationAt_source_eq (Ξ± : M) : geodesicChartDomain (I := I) (M := M) Ξ± := by rw [Trivialization.source_eq]; rfl +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The chart-Ξ± coordinate `chartFiberCoord Ξ± : TangentBundle I M β†’ E` is smooth on `geodesicChartDomain Ξ±`. Equivalent to: the second component of the trivialisation of `TM` at `Ξ±` is smooth on the chart base set. -/ @@ -812,6 +857,7 @@ lemma chartFiberCoord_contMDiffOn (Ξ± : M) : (geodesicChartDomain (I := I) Ξ±) := contMDiffOn_id exact (hiff.mp hid).2 +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** Projection `TangentBundle I M β†’ M` is globally smooth (Mathlib fact, repeated here in a `ContMDiffOn` form for convenience). -/ lemma proj_contMDiffOn (s : Set (TangentBundle I M)) : @@ -819,6 +865,7 @@ lemma proj_contMDiffOn (s : Set (TangentBundle I M)) : (Bundle.TotalSpace.proj : TangentBundle I M β†’ M) s := (Bundle.contMDiff_proj (TangentSpace I) (n := (∞ : WithTop β„•βˆž))).contMDiffOn +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The composition `extChartAt I Ξ± ∘ proj : TangentBundle I M β†’ E` is smooth on the chart domain. -/ lemma extChartAt_proj_contMDiffOn (Ξ± : M) : @@ -837,6 +884,7 @@ lemma extChartAt_proj_contMDiffOn (Ξ± : M) : fun _ hp => hp exact hchart.comp hproj hsubset +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart Christoffel symbol entry `chartChristoffel g Ξ± i j k`, evaluated at the chart image of `p.proj`, is smooth in `p` on the chart domain. -/ lemma chartChristoffel_extChartAt_proj_contMDiffOn @@ -867,6 +915,7 @@ lemma chartChristoffel_extChartAt_proj_contMDiffOn have := (hΞ“_at.contMDiffAt).comp_contMDiffWithinAt p hbase exact this +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The Christoffel-contraction scalar `βˆ‘_{ij} Ξ“^k_{ij}(y) Β· v_i Β· v_j` (with `v = chartFiberCoord Ξ± p` and `y = extChartAt I Ξ± p.proj`) is smooth in `p` on the chart domain. -/ @@ -909,6 +958,7 @@ lemma chartChristoffelContraction_scalarCoeff_contMDiffOn exact (hCLM_j.contMDiffAt).comp_contMDiffWithinAt _ (hv p hp) exact (hΞ“.mul hci).mul hcj +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The Christoffel-contraction `Ξ“_Ξ±(v, v)(y)` (with `v = chartFiberCoord Ξ± p`, `y = extChartAt I Ξ± p.proj`) is smooth in `p` on the chart domain. -/ lemma chartChristoffelContraction_chartFiber_contMDiffOn @@ -929,6 +979,7 @@ lemma chartChristoffelContraction_chartFiber_contMDiffOn (geodesicChartDomain (I := I) Ξ±) := contMDiffOn_const exact hscalar.smul hconst +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart-fiber expression of the geodesic vector field is smooth as a function `TangentBundle I M β†’ E Γ— E` on the chart domain. -/ lemma geodesicVectorFieldChartFiber_contMDiffOn @@ -965,6 +1016,7 @@ private instance trivializationAt_tangent_tangent_isAtlas (Ξ± : M) : (⟨α, (0 : E)⟩ : TangentBundle I M)) := ⟨FiberBundle.trivialization_mem_atlas (E Γ— E) (TangentSpace I.tangent) _⟩ +omit [I.Boundaryless] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** By construction (using the inverse trivialisation), applying the trivialisation of `T(TM)` at `⟨α, 0⟩` to `⟨p, geodesicVectorFieldChart g Ξ± p⟩` returns `(p, geodesicVectorFieldChartFiber g Ξ± p)` on the chart domain. -/ @@ -983,6 +1035,7 @@ lemma trivializationAt_apply_geodesicVectorFieldChart (⟨α, (0 : E)⟩ : TangentBundle I M)).apply_mk_symm hp' (geodesicVectorFieldChartFiber (I := I) g Ξ± p) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **G.1.2 smoothness theorem**: the chart-fixed geodesic vector field, viewed as a section of `T(TM)`, is `C^∞` on the chart domain. -/ theorem geodesicVectorFieldChart_contMDiffOn @@ -1024,6 +1077,7 @@ theorem geodesicVectorFieldChart_contMDiffOn geodesicVectorFieldChartFiber_contMDiffOn (I := I) g Ξ± exact hsmooth.congr heq +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** `ContMDiffAt`-form, suitable for Mathlib's `exists_isMIntegralCurveAt_of_contMDiffAt_boundaryless`. At every `pβ‚€` with `pβ‚€.proj ∈ (chartAt H Ξ±).source`, the chart-fixed geodesic vector field is diff --git a/OpenGALib/Riemannian/Geodesic/EquationTransfer.lean b/OpenGALib/Riemannian/Geodesic/EquationTransfer.lean index 1f012845..6e50fbee 100644 --- a/OpenGALib/Riemannian/Geodesic/EquationTransfer.lean +++ b/OpenGALib/Riemannian/Geodesic/EquationTransfer.lean @@ -1,7 +1,6 @@ import OpenGALib.Riemannian.Connection.ChartChristoffelChange import OpenGALib.Riemannian.Geodesic.Equation -set_option linter.unusedSectionVars false /-! # Chart-independence of the geodesic equation @@ -48,7 +47,7 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] variable [I.Boundaryless] @@ -59,9 +58,11 @@ variable [I.Boundaryless] def chartReading (Ξ± : M) (Ξ³ : ℝ β†’ M) : ℝ β†’ E := fun Ο„ => extChartAt I Ξ± (Ξ³ Ο„) +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in @[simp] lemma chartReading_def (Ξ± : M) (Ξ³ : ℝ β†’ M) (Ο„ : ℝ) : chartReading (I := I) Ξ± Ξ³ Ο„ = extChartAt I Ξ± (Ξ³ Ο„) := rfl +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in /-- **Math.** The chart-`Ξ±` reading anchored at the foot is the chart-local curve. -/ lemma chartReading_foot (Ξ³ : ℝ β†’ M) (t : ℝ) : chartReading (I := I) (Ξ³ t) Ξ³ = chartLocalCurve (I := I) Ξ³ t := rfl @@ -81,6 +82,7 @@ def SolvesGeodesicODEAt (g : RiemannianMetric I M) (Ξ± : M) (Ξ³ : ℝ β†’ M) (deriv (chartReading (I := I) Ξ± Ξ³) tβ‚€) (chartReading (I := I) Ξ± Ξ³ tβ‚€) = 0 +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The moving-foot geodesic equation at `tβ‚€` is exactly the fixed-chart second-order geodesic ODE anchored at the foot `Ξ³ tβ‚€` itself. -/ theorem hasGeodesicEquationAt_iff_solvesGeodesicODEAt @@ -104,6 +106,7 @@ section Transfer variable {g : RiemannianMetric I M} {Ξ³ : ℝ β†’ M} {tβ‚€ : ℝ} {Ξ± Ξ² : M} +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Change of chart for the second-order geodesic ODE** (the consequence of the Christoffel transformation law `chartChristoffelContraction_change`). If `Ξ³` is continuous at `tβ‚€`, its foot @@ -212,6 +215,7 @@ section Corollaries variable {g : RiemannianMetric I M} {Ξ³ : ℝ β†’ M} {tβ‚€ : ℝ} +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** A geodesic solves the honest second-order geodesic ODE in *every* chart whose source contains its foot (do Carmo Ch. 3, the coordinate form of Definition 2.1, in an arbitrary chart). -/ @@ -222,6 +226,7 @@ theorem HasGeodesicEquationAt.solvesGeodesicODEAt (hasGeodesicEquationAt_iff_solvesGeodesicODEAt.mp h).transfer hcont (mem_chart_source H (Ξ³ tβ‚€)) hΞ² +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** A curve solving the second-order geodesic ODE in one chart containing its foot satisfies the intrinsic (moving-foot) geodesic equation. -/ theorem SolvesGeodesicODEAt.hasGeodesicEquationAt {Ξ± : M} diff --git a/OpenGALib/Riemannian/Geodesic/Existence.lean b/OpenGALib/Riemannian/Geodesic/Existence.lean index eb587dc4..2010297b 100644 --- a/OpenGALib/Riemannian/Geodesic/Existence.lean +++ b/OpenGALib/Riemannian/Geodesic/Existence.lean @@ -1,13 +1,12 @@ import OpenGALib.Riemannian.Geodesic.Equation import Mathlib.Geometry.Manifold.IntegralCurve.ExistUnique -set_option linter.unusedSectionVars false /-! # Local existence of geodesics via Picard-LindelΓΆf For a smooth Riemannian metric `g` on a smooth manifold `M` (boundaryless, -modelled on a complete inner-product space `E`) and any initial datum +modelled on a finite-dimensional inner-product space `E`) and any initial datum `(p : M, v : T_p M)`, there exists a curve `Ξ³ : ℝ β†’ M` starting at `p` that is the projection of a local integral curve of the chart-fixed geodesic vector field `geodesicVectorFieldChart g p` on `T M`. @@ -20,8 +19,9 @@ The construction proceeds in two steps: field is `C^∞` at `⟨p, v⟩ : TangentBundle I M` by `geodesicVectorFieldChart_contMDiffAt`; the tangent bundle is boundaryless because `(I.prod π“˜(ℝ, E)).Boundaryless` is automatic - from `[I.Boundaryless]`; `[CompleteSpace E]` is a hypothesis of the - theorem. The output is a curve `f : ℝ β†’ TangentBundle I M` with + from `[I.Boundaryless]`; finite-dimensional real normed spaces are complete, + as required by the existence theorem. The output is a curve + `f : ℝ β†’ TangentBundle I M` with `f 0 = ⟨p, v⟩` and `IsMIntegralCurveAt f (gvfChart g p) 0`. 2. **Projection to `M`.** Set `Ξ³ t := (f t).proj`. Then `Ξ³ 0 = p` and @@ -43,18 +43,19 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Picard-LindelΓΆf lift.** For a smooth Riemannian metric `g`, point `p : M`, and tangent vector `v : T_p M`, on a boundaryless smooth manifold modelled on a complete inner-product space, there exists a curve `f : ℝ β†’ TangentBundle I M` with `f 0 = ⟨p, v⟩` that is a local integral curve of `geodesicVectorFieldChart g p` at `0`. -/ theorem exists_isMIntegralCurveAt_geodesicVectorFieldChart - (g : RiemannianMetric I M) [I.Boundaryless] [CompleteSpace E] + (g : RiemannianMetric I M) [I.Boundaryless] (p : M) (v : TangentSpace I p) : βˆƒ f : ℝ β†’ TangentBundle I M, f 0 = (⟨p, v⟩ : TangentBundle I M) ∧ @@ -84,9 +85,11 @@ theorem exists_isMIntegralCurveAt_geodesicVectorFieldChart `Ξ³ : ℝ β†’ M`, namely `Ξ³ t := (f t).proj`. -/ def projectCurve (f : ℝ β†’ TangentBundle I M) : ℝ β†’ M := fun t => (f t).proj +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in @[simp] lemma projectCurve_apply (f : ℝ β†’ TangentBundle I M) (t : ℝ) : projectCurve (I := I) f t = (f t).proj := rfl +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in /-- **Math.** If the lifted curve starts at `⟨p, v⟩`, its projection starts at `p`. -/ lemma projectCurve_zero_of_lift {f : ℝ β†’ TangentBundle I M} {p : M} {v : E} (hf0 : f 0 = (⟨p, v⟩ : TangentBundle I M)) : @@ -95,8 +98,9 @@ lemma projectCurve_zero_of_lift {f : ℝ β†’ TangentBundle I M} {p : M} {v : E} section ChartedPicardLindelof -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Local existence of geodesics with prescribed initial velocity.** For a smooth Riemannian metric `g`, an initial point `p : M`, and an initial velocity `v : T_p M`, there exists a curve `Ξ³ : ℝ β†’ M` through `p`, together @@ -130,6 +134,7 @@ theorem exists_geodesic_with_initial_velocity_at have h0 : (f 0).proj = p := projectCurve_zero_of_lift (I := I) hf0 rw [h0]; exact mem_chart_source H p +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The manifold derivative of the lifted curve at `0`. -/ theorem hasMFDerivAt_lift_zero {g : RiemannianMetric I M} {f : ℝ β†’ TangentBundle I M} diff --git a/OpenGALib/Riemannian/Geodesic/FiberScaling.lean b/OpenGALib/Riemannian/Geodesic/FiberScaling.lean index 8bd79af4..78422a42 100644 --- a/OpenGALib/Riemannian/Geodesic/FiberScaling.lean +++ b/OpenGALib/Riemannian/Geodesic/FiberScaling.lean @@ -1,7 +1,6 @@ import OpenGALib.Riemannian.Geodesic.Equation import Mathlib.Geometry.Manifold.MFDeriv.Atlas -set_option linter.unusedSectionVars false /-! # The fibre-scaling bundle map and the geodesic spray @@ -55,7 +54,7 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] @@ -64,12 +63,15 @@ each tangent vector by `a` while fixing its foot point. -/ def fiberScaling (a : ℝ) (p : TangentBundle I M) : TangentBundle I M := ⟨p.proj, a β€’ p.2⟩ +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in @[simp] lemma fiberScaling_proj (a : ℝ) (p : TangentBundle I M) : (fiberScaling (I := I) a p).proj = p.proj := rfl +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in @[simp] lemma fiberScaling_snd (a : ℝ) (p : TangentBundle I M) : (fiberScaling (I := I) a p).2 = a β€’ p.2 := rfl +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in /-- **Math.** `fiberScaling` fixes the foot point, so it preserves the chart domain `geodesicChartDomain Ξ±`. -/ lemma fiberScaling_mem_geodesicChartDomain {Ξ± : M} {a : ℝ} @@ -78,6 +80,7 @@ lemma fiberScaling_mem_geodesicChartDomain {Ξ± : M} {a : ℝ} section FibreLinearity +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Fibre linearity of the chart-`Ξ±` fibre coordinate.** On the chart domain (where the trivialisation at `Ξ±` is genuinely linear on the fibre), the chart-`Ξ±` fibre coordinate of `fiberScaling a p` is `a` times that of `p`. -/ @@ -105,6 +108,7 @@ section Smoothness variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The chart-`Ξ±`-fixed fibre coordinate `p ↦ (e_Ξ± p).2` is smooth at every point whose foot lies in the trivialisation base set (obtained from the identity map via `Bundle.contMDiffAt_totalSpace`). -/ @@ -122,6 +126,7 @@ lemma contMDiffAt_trivializationAt_snd (Ξ± : M) {pβ‚€ : TangentBundle I M} rw [hpβ‚€] at h exact h +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** **Smoothness of the fibre-scaling bundle map.** `fiberScaling a` is `C^∞` as a self-map of the tangent bundle. -/ theorem fiberScaling_contMDiff (a : ℝ) : @@ -171,6 +176,7 @@ end Smoothness section CoordinatePushforward +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Coordinate pushforward.** The chart-fibre spray value at `fiberScaling a p` is the spray coordinate map evaluated at the scaled velocity `aΒ·v`; by `geodesicSprayCoord_smul_velocity` this equals @@ -233,9 +239,11 @@ section ChartReading def fiberScalingLinearMap (a : ℝ) : (E Γ— E) β†’L[ℝ] E Γ— E := (ContinuousLinearMap.id ℝ E).prodMap (a β€’ ContinuousLinearMap.id ℝ E) +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma fiberScalingLinearMap_apply (a : ℝ) (z : E Γ— E) : fiberScalingLinearMap (E := E) a z = (z.1, a β€’ z.2) := rfl +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The extended chart of the tangent bundle at a basepoint `b : TM` is the product of the base chart at `b.proj` and the fibre trivialization at `b.proj`: `Ο†_b(r) = (Ο†_{b.proj}(r.proj), (e_{b.proj} r).2)` for every `r` whose foot lies in @@ -255,6 +263,7 @@ lemma extChartAt_tangent_apply (b : TangentBundle I M) {r : TangentBundle I M} Function.comp_apply] rfl +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** In the tangent-bundle chart at ANY basepoint `b : TM`, the fibre-scaling bundle map reads as the graded linear model map `Ξ›_a = fiberScalingLinearMap a`, at every point whose foot lies in the trivialization base set at `b.proj`. -/ @@ -280,12 +289,14 @@ section MFDerivFiberScaling variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The extended chart of `TM` at `fiberScaling a p` is the extended chart at `p` itself: tangent-bundle charts depend only on the foot point, which fibre scaling fixes. -/ lemma extChartAt_tangent_fiberScaling_basepoint (a : ℝ) (p : TangentBundle I M) : extChartAt I.tangent (fiberScaling (I := I) a p) = extChartAt I.tangent p := rfl +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** **The manifold derivative of the fibre-scaling bundle map.** `fiberScaling a : TM β†’ TM` has manifold derivative the graded linear map `Ξ›_a = fiberScalingLinearMap a` at every point, in the definitional `E Γ— E` presentation @@ -330,6 +341,7 @@ theorem hasMFDerivAt_fiberScaling (a : ℝ) (p : TangentBundle I M) : exact ((fiberScalingLinearMap (E := E) a).hasFDerivAt.hasFDerivWithinAt).congr_of_eventuallyEq hev heq_at +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The `mfderiv` of the fibre-scaling map is the graded linear map `Ξ›_a`. -/ theorem mfderiv_fiberScaling (a : ℝ) (p : TangentBundle I M) : mfderiv I.tangent I.tangent (fiberScaling (I := I) (M := M) a) p = @@ -342,6 +354,7 @@ section SymmLNaturality variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Graded naturality of the double-tangent trivialization under fibre scaling** (the keystone identity `(β˜…)`). Writing `eβ‚€` for the trivialization of `T(TM)` at `⟨α, 0⟩`, `S_a := fiberScaling a` and `Ξ›_a := fiberScalingLinearMap a`, @@ -464,6 +477,7 @@ section SprayKeystone variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Degree-2 graded homogeneity of the chart-fixed geodesic spray in definitional coordinates** (do Carmo Ch. 3, the heart of Lemma 2.6). For every `q : TM` (no chart hypothesis β€” off the chart domain both sides are junk `0`): @@ -520,6 +534,7 @@ theorem geodesicVectorFieldChart_fiberScaling (g : RiemannianMetric I M) (Ξ± : M rw [smul_zero] exact (map_zero _).symm +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Spray equivariance of the fibre-scaling tangent map**: the manifold derivative of `S_a = fiberScaling a` sends the time-rescaled spray `a β€’ G` at `q` to the spray at `S_a q`. This is the exact identity consumed by the integral-curve diff --git a/OpenGALib/Riemannian/Geodesic/FlowC1Dependence.lean b/OpenGALib/Riemannian/Geodesic/FlowC1Dependence.lean index 263d80ed..d1303669 100644 --- a/OpenGALib/Riemannian/Geodesic/FlowC1Dependence.lean +++ b/OpenGALib/Riemannian/Geodesic/FlowC1Dependence.lean @@ -1,7 +1,6 @@ import OpenGALib.Riemannian.Geodesic.UniformExistence import OpenGALib.Riemannian.Geodesic.FlowDependence -set_option linter.unusedSectionVars false /-! # CΒΉ dependence of the local geodesic flow on its initial condition @@ -52,11 +51,12 @@ namespace Geodesic open Riemannian.FlowDependence variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The local geodesic flow is strictly differentiable in its initial condition at every point of the flow ball** (do Carmo Ch. 3, Thm 2.2 / Prop. 2.7, pointwise CΒΉ dependence for the geodesic spray). There are `r, Ξ΅ > 0`, a local flow `Z` of the diff --git a/OpenGALib/Riemannian/Geodesic/FlowC2Dependence.lean b/OpenGALib/Riemannian/Geodesic/FlowC2Dependence.lean index cc826292..11072868 100644 --- a/OpenGALib/Riemannian/Geodesic/FlowC2Dependence.lean +++ b/OpenGALib/Riemannian/Geodesic/FlowC2Dependence.lean @@ -1,7 +1,6 @@ import OpenGALib.Riemannian.Geodesic.VariationalEquation import OpenGALib.Riemannian.Geodesic.UniformExistence -set_option linter.unusedSectionVars false -- the sup-norm instance on curves valued in operators of the extended state space -- needs nested pending instance synthesis beyond the default depth set_option maxSynthPendingDepth 3 @@ -50,13 +49,14 @@ namespace Geodesic open Riemannian.FlowDependence variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] -set_option maxHeartbeats 1600000 in -set_option linter.unusedVariables false in +-- The extended variational-flow construction times out at 300000 heartbeats; 400000 is sufficient. +set_option maxHeartbeats 400000 in +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The local geodesic flow is `CΒ²` in its initial condition at every point of the flow ball** (do Carmo Ch. 3, Thm 2.2 / Prop. 2.7, second-order dependence for the geodesic spray). There are `r, Ξ΅ > 0`, a local flow `Z` of the coordinate spray at `p` @@ -78,9 +78,8 @@ theorem exists_uniform_geodesic_flow_hasStrictFDerivAt_opFlow (g : RiemannianMetric I M) (p : M) : βˆƒ (r Ξ΅ T : ℝ) (Z : E Γ— E β†’ ℝ β†’ E Γ— E) (L : ℝβ‰₯0) (Οƒ : E Γ— E β†’ C(Set.Icc (0:ℝ) T, E Γ— E)) - (Ο„ : E Γ— E β†’ C(Set.Icc (0:ℝ) T, (E Γ— E) β†’L[ℝ] (E Γ— E))) - (hT : 0 < T), - 0 < r ∧ 0 < Ξ΅ ∧ T < Ξ΅ ∧ + (Ο„ : E Γ— E β†’ C(Set.Icc (0:ℝ) T, (E Γ— E) β†’L[ℝ] (E Γ— E))), + 0 < T ∧ 0 < r ∧ 0 < Ξ΅ ∧ T < Ξ΅ ∧ (βˆ€ z ∈ closedBall ((extChartAt I p p, (0 : E)) : E Γ— E) r, Z z 0 = z ∧ (βˆ€ t ∈ Icc (-Ξ΅) Ξ΅, HasDerivWithinAt (Z z) diff --git a/OpenGALib/Riemannian/Geodesic/FlowDependence.lean b/OpenGALib/Riemannian/Geodesic/FlowDependence.lean index 457e6ae1..a2024b05 100644 --- a/OpenGALib/Riemannian/Geodesic/FlowDependence.lean +++ b/OpenGALib/Riemannian/Geodesic/FlowDependence.lean @@ -9,7 +9,6 @@ import Mathlib.Analysis.Calculus.ImplicitFunction.ProdDomain import Mathlib.Analysis.Calculus.ContDiff.Defs import Mathlib.Analysis.SpecificLimits.Normed -set_option linter.unusedSectionVars false /-! # CΒΉ dependence of ODE solutions on the initial condition @@ -92,9 +91,11 @@ linear operator `C(K, E) β†’L[ℝ] C(K, F)` on curve spaces, `(postcomp A) Ξ² = def postcomp (A : E β†’L[ℝ] F) : C(K, E) β†’L[ℝ] C(K, F) := A.compLeftContinuous ℝ K +omit [CompleteSpace E] [CompactSpace K] in @[simp] lemma postcomp_apply (A : E β†’L[ℝ] F) (Ξ² : C(K, E)) (t : K) : postcomp A Ξ² t = A (Ξ² t) := rfl +omit [CompleteSpace E] in /-- **Math.** Postcomposition is bounded in operator norm by the norm of the composing map: `β€–postcomp Aβ€– ≀ β€–Aβ€–` (in sup norm, `β€–A ∘ Ξ²β€– ≀ β€–Aβ€– β€–Ξ²β€–`). -/ lemma norm_postcomp_le (A : E β†’L[ℝ] F) : @@ -119,15 +120,18 @@ def postcompCurve (A : C(K, E β†’L[ℝ] F)) : C(K, E) β†’L[ℝ] C(K, F) := (mul_le_mul (A.norm_coe_le_norm t) (Ξ².norm_coe_le_norm t) (norm_nonneg _) (norm_nonneg _))) +omit [CompleteSpace E] in @[simp] lemma postcompCurve_apply (A : C(K, E β†’L[ℝ] F)) (Ξ² : C(K, E)) (t : K) : postcompCurve A Ξ² t = A t (Ξ² t) := rfl +omit [CompleteSpace E] in /-- **Math.** Postcomposition by an operator family is bounded in operator norm by the sup norm of the family: `β€–postcompCurve Aβ€– ≀ β€–Aβ€–` (in sup norms, `β€–t ↦ A t (Ξ² t)β€– ≀ β€–Aβ€– β€–Ξ²β€–`). -/ lemma norm_postcompCurve_le (A : C(K, E β†’L[ℝ] F)) : β€–(postcompCurve A : C(K, E) β†’L[ℝ] C(K, F))β€– ≀ β€–Aβ€– := LinearMap.mkContinuous_norm_le _ (norm_nonneg A) _ +omit [CompleteSpace E] in /-- **Math.** Postcomposition by the constant operator family is postcomposition by its value: `postcompCurve (const A) = postcomp A`. -/ lemma postcompCurve_const (A : E β†’L[ℝ] F) : @@ -143,6 +147,7 @@ on the curves of interest, whose values stay in the continuity set of `f`). -/ def superposition (f : E β†’ E) : C(K, E) β†’ C(K, E) := fun Ξ± => if h : Continuous (f ∘ Ξ±) then ⟨f ∘ Ξ±, h⟩ else 0 +omit [NormedSpace ℝ E] [CompleteSpace E] [CompactSpace K] in /-- **Math.** On a curve `Ξ±` whose values stay inside a set where `f` is continuous, the superposition operator is honest composition: `superposition f Ξ± t = f (Ξ± t)`. -/ lemma superposition_apply_of_continuousOn {f : E β†’ E} {s : Set E} @@ -153,6 +158,7 @@ lemma superposition_apply_of_continuousOn {f : E β†’ E} {s : Set E} rw [dif_pos h] rfl +omit [NormedSpace ℝ E] [CompleteSpace E] [CompactSpace K] in /-- **Math.** Superposition sends the constant curve at `x` to the constant curve at `f x`. -/ lemma superposition_const (f : E β†’ E) (x : E) : superposition f (ContinuousMap.const K x) = ContinuousMap.const K (f x) := by @@ -179,6 +185,7 @@ lemma _root_.IsCompact.exists_forall_dist_image_lt_of_continuousAt ⟨δ, hΞ΄, H⟩ exact ⟨δ, hΞ΄, fun x hx y hxy => H hxy hx⟩ +omit [CompleteSpace E] in /-- **Math.** Strict differentiability of the superposition operator at an arbitrary base curve: if `f` is differentiable on an open set `u` containing the (compact) range of `Ξ±β‚€ : C(K, E)`, with derivative `f'` continuous at every point of that range, then `Ξ± ↦ f ∘ Ξ±` @@ -260,6 +267,7 @@ theorem hasStrictFDerivAt_superposition rwa [ContinuousMap.sub_apply] at h3 exact (key t _ (hval hΞ± t) _ (hval hΞ² t)).trans (mul_le_mul_of_nonneg_left h2 hΞ΅.le) +omit [CompleteSpace E] in /-- **Math.** Strict differentiability of the superposition operator at a constant curve: if `f` is differentiable on a ball around `xβ‚€` with derivative `f'` continuous at `xβ‚€`, then `Ξ± ↦ f ∘ Ξ±` is strictly differentiable at `const xβ‚€` with derivative `postcomp (f' xβ‚€)`. @@ -308,15 +316,18 @@ def intervalPrimitive (hT : (0:ℝ) ≀ T) : _ = (t:ℝ) * β€–Ξ²β€– := by rw [sub_zero, abs_of_nonneg t.2.1, mul_comm] _ ≀ T * β€–Ξ²β€– := mul_le_mul_of_nonneg_right t.2.2 (norm_nonneg Ξ²)) +omit [CompleteSpace E] in @[simp] lemma intervalPrimitive_apply (hT : (0:ℝ) ≀ T) (Ξ² : C(Set.Icc (0:ℝ) T, E)) (t : Set.Icc (0:ℝ) T) : intervalPrimitive hT Ξ² t = ∫ s in (0:ℝ)..(t:ℝ), Ξ² (Set.projIcc 0 T hT s) := rfl +omit [CompleteSpace E] in /-- **Math.** The Volterra primitive over `[0,T]` has operator norm at most `T`. -/ lemma norm_intervalPrimitive_le (hT : (0:ℝ) ≀ T) : β€–(intervalPrimitive hT : C(Set.Icc (0:ℝ) T, E) β†’L[ℝ] C(Set.Icc (0:ℝ) T, E))β€– ≀ T := LinearMap.mkContinuous_norm_le _ hT _ +omit [CompleteSpace E] in /-- **Math.** Composite bound `β€–J ∘ Mβ€– ≀ T β€–Aβ€–` for the Volterra primitive `J` following postcomposition `M` with `A`; this is the contraction estimate making `1 - J ∘ M` invertible when `T β€–Aβ€– < 1`. -/ @@ -325,6 +336,7 @@ lemma norm_intervalPrimitive_comp_postcomp_le (hT : (0:ℝ) ≀ T) (A : E β†’L[ refine le_trans (ContinuousLinearMap.opNorm_comp_le _ _) ?_ exact mul_le_mul (norm_intervalPrimitive_le hT) (norm_postcomp_le A) (norm_nonneg _) hT +omit [CompleteSpace E] in /-- **Math.** Composite bound `β€–J ∘ Mβ€– ≀ T β€–Aβ‚€β€–` for the Volterra primitive `J` following postcomposition `M` with an operator curve `Aβ‚€`; this is the contraction estimate making `1 - J ∘ M` invertible when `T β€–Aβ‚€β€– < 1`, along an arbitrary base solution. -/ @@ -343,6 +355,7 @@ def picardResidual (hT : (0:ℝ) ≀ T) (f : E β†’ E) : E Γ— C(Set.Icc (0:ℝ) T, E) β†’ C(Set.Icc (0:ℝ) T, E) := fun q => q.2 - ContinuousMap.const _ q.1 - intervalPrimitive hT (superposition f q.2) +omit [CompleteSpace E] in @[simp] lemma picardResidual_apply (hT : (0:ℝ) ≀ T) (f : E β†’ E) (x : E) (Ξ± : C(Set.Icc (0:ℝ) T, E)) : picardResidual hT f (x, Ξ±) @@ -390,6 +403,7 @@ theorem picardResidual_eq_zero_of_hasDerivWithinAt ContinuousMap.zero_apply, intervalPrimitive_apply, key, hΟƒ t] abel +omit [CompleteSpace E] in /-- **Math.** At an equilibrium `f xβ‚€ = 0`, the constant curve at `xβ‚€` is a zero of the Picard residual (the integrand vanishes identically). -/ theorem picardResidual_const_eq_zero (hT : 0 < T) {f : E β†’ E} {xβ‚€ : E} (heq : f xβ‚€ = 0) : @@ -417,6 +431,7 @@ def linearRamp (hT : (0:ℝ) ≀ T) : E β†’L[ℝ] C(Set.Icc (0:ℝ) T, E) := rw [norm_smul, Real.norm_eq_abs, abs_of_nonneg t.2.1] _ ≀ T * β€–vβ€– := mul_le_mul_of_nonneg_right t.2.2 (norm_nonneg v)) +omit [CompleteSpace E] in @[simp] lemma linearRamp_apply (hT : (0:ℝ) ≀ T) (v : E) (t : Set.Icc (0:ℝ) T) : linearRamp hT v t = (t : ℝ) β€’ v := rfl diff --git a/OpenGALib/Riemannian/Geodesic/FlowGeodesic.lean b/OpenGALib/Riemannian/Geodesic/FlowGeodesic.lean index 4e86808f..85c66609 100644 --- a/OpenGALib/Riemannian/Geodesic/FlowGeodesic.lean +++ b/OpenGALib/Riemannian/Geodesic/FlowGeodesic.lean @@ -1,6 +1,5 @@ import OpenGALib.Riemannian.Geodesic.EquationTransfer -set_option linter.unusedSectionVars false /-! # Coordinate spray solutions are intrinsic geodesics @@ -38,7 +37,7 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] variable [I.Boundaryless] @@ -48,6 +47,7 @@ component of `ΞΆ : ℝ β†’ E Γ— E`, pulled back to `M` through the chart at `q`. def sprayBase (q : M) (ΞΆ : ℝ β†’ E Γ— E) : ℝ β†’ M := fun Ο„ => (extChartAt I q).symm (ΞΆ Ο„).1 +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in @[simp] lemma sprayBase_apply (q : M) (ΞΆ : ℝ β†’ E Γ— E) (Ο„ : ℝ) : sprayBase (I := I) q ΞΆ Ο„ = (extChartAt I q).symm (ΞΆ Ο„).1 := rfl @@ -55,6 +55,7 @@ section SprayBase variable {g : RiemannianMetric I M} {q : M} {ΞΆ : ℝ β†’ E Γ— E} {J : Set ℝ} +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in /-- **Math.** The base curve of a spray solution confined to the chart target stays in the chart source at `q`. -/ theorem sprayBase_mem_chart_source @@ -63,6 +64,7 @@ theorem sprayBase_mem_chart_source have := (extChartAt I q).map_target (hmem Ο„ hΟ„) rwa [extChartAt_source] at this +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] [I.Boundaryless] in /-- **Math.** The chart-`q` reading of the base curve recovers the position component of the spray solution. -/ theorem chartReading_sprayBase @@ -70,6 +72,7 @@ theorem chartReading_sprayBase chartReading (I := I) q (sprayBase (I := I) q ΞΆ) Ο„ = (ΞΆ Ο„).1 := (extChartAt I q).right_inv (hmem Ο„ hΟ„) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The base curve of a (differentiable) spray solution is continuous on the set where the ODE holds. -/ theorem continuousOn_sprayBase @@ -81,6 +84,7 @@ theorem continuousOn_sprayBase ((hd Ο„ hΟ„).continuousAt.continuousWithinAt).fst exact (continuousOn_extChartAt_symm q).comp hpos hmem +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The chart-`q` reading of the base curve of a spray solution is differentiable at every time of the (open) ODE set, with derivative the velocity component of the solution: the spray ODE's first equation `x' = w`. -/ @@ -99,6 +103,7 @@ theorem hasDerivAt_chartReading_sprayBase (hJ : IsOpen J) filter_upwards [hJ.mem_nhds hΟ„] with Ο„' hΟ„' exact chartReading_sprayBase (I := I) hmem hΟ„' +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Spray solutions are intrinsic geodesics.** The base curve of a coordinate spray solution on an open set of times, confined to the chart target at `q`, satisfies the intrinsic (moving-foot) geodesic equation at diff --git a/OpenGALib/Riemannian/Geodesic/FlowReadback.lean b/OpenGALib/Riemannian/Geodesic/FlowReadback.lean index e525a998..c232ba5e 100644 --- a/OpenGALib/Riemannian/Geodesic/FlowReadback.lean +++ b/OpenGALib/Riemannian/Geodesic/FlowReadback.lean @@ -1,7 +1,6 @@ import OpenGALib.Riemannian.Geodesic.UniformExistence import OpenGALib.Riemannian.Geodesic.IntrinsicUniqueness -set_option linter.unusedSectionVars false /-! # Readback of intrinsic geodesics from the uniform geodesic flow @@ -55,11 +54,12 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] [T2Space M] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] [T2Space M] +omit [T2Space (TangentBundle I M)] [T2Space M] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Descent on the open window: flow segments of the chart-`p` spray are intrinsic geodesic segments on all of `(-(Ξ΅/T), Ξ΅/T)`** (the `Ioo` generalization of `isGeodesicOn_uniform_flow_segment`, whose statement @@ -230,6 +230,7 @@ theorem isGeodesicOn_uniform_flow_segment_Ioo (hc s hs).congr_of_eventuallyEq (hread_ev s hs) exact ⟨hΞ³0, hΞ³cont, hgeo, fun s hs => ⟨hΞ³src s hs, hread s hs⟩, hvel, hvelJ⟩ +omit [T2Space (TangentBundle I M)] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Readback: every continuous intrinsic geodesic with initial data in the uniform flow ball is computed by the flow** (do Carmo Ch. 7, Theorem 2.8, the flow-box ingredient of f) ⟹ b)). Let `Z` be a local flow of the chart-`p` @@ -296,6 +297,7 @@ theorem IsGeodesicOn.eq_uniform_flow_readback (hΟƒ.mono hsub_a) (hgeo.mono hsub_J) (hΟƒc.mono hsub_a) (hcont.mono hsub_J) h0b heq0 hΞ² (hvΟƒ.trans hvf.symm) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The uniform flow box with descent and readback, packaged** (do Carmo Ch. 7, Theorem 2.8, groundwork for f) ⟹ b)). At every `p : M` there are `r, Ξ΅, T > 0` with `T < Ξ΅` and a local flow `Z` of the chart-`p` coordinate diff --git a/OpenGALib/Riemannian/Geodesic/Homogeneity.lean b/OpenGALib/Riemannian/Geodesic/Homogeneity.lean index 45e52a21..47537ac6 100644 --- a/OpenGALib/Riemannian/Geodesic/Homogeneity.lean +++ b/OpenGALib/Riemannian/Geodesic/Homogeneity.lean @@ -1,7 +1,6 @@ import OpenGALib.Riemannian.Geodesic.FiberScaling import OpenGALib.Riemannian.Geodesic.MaximalInterval -set_option linter.unusedSectionVars false /-! # Homogeneity of geodesics (do Carmo Ch. 3, Lemma 2.6) @@ -48,7 +47,7 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] @@ -56,6 +55,7 @@ section IntegralCurveTransform variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Integral-curve homogeneity transform** (do Carmo Ch. 3, Lemma 2.6, bundle level). If `f` is an integral curve of the chart-fixed geodesic spray on `s`, then the fibre-scaled, time-rescaled lift `t ↦ S_a (f (a t))` is an integral @@ -98,8 +98,9 @@ end IntegralCurveTransform section WitnessTransform -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Homogeneity of geodesics, witness level** (do Carmo Ch. 3, Lemma 2.6). If `Ξ³` is a geodesic on `s` with initial data `(p, v)`, then the affine reparametrisation `t ↦ Ξ³ (a t)` is a geodesic on `{t | a t ∈ s}` with @@ -121,6 +122,7 @@ theorem IsGeodesicOnWithInitial.fiberScale rw [mul_zero, hf0] rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Homogeneity of the maximal-interval witness**: if a geodesic with initial data `(p, v)` covers time `t`, then a geodesic with initial data `(p, a β€’ v)` covers time `t / a` (for `a β‰  0`). -/ @@ -148,6 +150,7 @@ theorem MaximalGeodesicWitness.fiberScale Β· show a * (t / a) ∈ J rwa [mul_div_cancelβ‚€ _ ha] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Scaling of the maximal interval of definition** (do Carmo Ch. 3, Lemma 2.6, interval half): for `a β‰  0`, `I_max(p, a β€’ v) = {t | a t ∈ I_max(p, v)}`. In particular, if the geodesic with @@ -173,6 +176,7 @@ theorem maximalGeodesicInterval_fiberScale rw [harg] at h exact h +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Pointwise uniform interval of definition** (do Carmo Ch. 3, Prop. 2.7, pointwise-in-`(p, v)` form). For every initial datum `(p, v)` and every time bound `T`, a positive rescaling `c β€’ v` of the initial velocity makes @@ -209,8 +213,9 @@ end WitnessTransform section ConnectedPropagation -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Connected-propagation uniqueness for spray integral curves.** Two integral curves of the chart-fixed geodesic vector field on an open preconnected set `J` that agree at some `tβ‚€ ∈ J` agree on all of `J`, provided the foot of the @@ -271,6 +276,7 @@ theorem isMIntegralCurveOn_geodesicVectorFieldChart_eqOn exact hU_eq _ (hVU hu) exact (IsClopen.eq_univ ⟨hTsub_closed, hTsub_open⟩ ⟨_, h0_mem⟩ :) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Agreement of initial-data geodesic witnesses.** Two geodesics with the same initial data `(p, v)` on open witness sets agree on any preconnected open subset of the overlap containing `0`, provided the first witness keeps its foot in @@ -301,8 +307,9 @@ end ConnectedPropagation section ValueHomogeneity -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Homogeneity of the canonical maximal geodesic** (do Carmo Ch. 3, Lemma 2.6): `Ξ³(t, p, a β€’ v) = Ξ³(a t, p, v)` for `a β‰  0` and `a t` in the maximal interval of `(p, v)`. diff --git a/OpenGALib/Riemannian/Geodesic/HopfRinow/ConstantSpeed.lean b/OpenGALib/Riemannian/Geodesic/HopfRinow/ConstantSpeed.lean index 6dc759b4..47bab240 100644 --- a/OpenGALib/Riemannian/Geodesic/HopfRinow/ConstantSpeed.lean +++ b/OpenGALib/Riemannian/Geodesic/HopfRinow/ConstantSpeed.lean @@ -36,7 +36,6 @@ hypothesis `g.IsRiemannianDist` (the ambient `edist` is the Riemannian distance of `g`), consuming `edist_le_pathELength_of_cmdiff`. -/ -set_option linter.unusedSectionVars false noncomputable section @@ -47,13 +46,14 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} section Velocity variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Projection of the geodesic equation: the moving-foot chart curve has its own derivative at the base time. -/ theorem HasGeodesicEquationAt.hasDerivAt_chartLocalCurve {g : RiemannianMetric I M} @@ -63,6 +63,7 @@ theorem HasGeodesicEquationAt.hasDerivAt_chartLocalCurve {g : RiemannianMetric I obtain ⟨v, a, hv, -, -, -⟩ := h simpa [hv.deriv] using hv +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Projection of the geodesic equation: the moving-foot chart curve is differentiable in a neighbourhood of the base time. -/ theorem HasGeodesicEquationAt.eventually_hasDerivAt_chartLocalCurve @@ -73,6 +74,7 @@ theorem HasGeodesicEquationAt.eventually_hasDerivAt_chartLocalCurve obtain ⟨v, a, -, hev, -, -⟩ := h exact hev +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Projection of the geodesic equation: the chart velocity is continuous at the base time (it is even differentiable there, since the equation provides a second derivative). -/ @@ -83,6 +85,7 @@ theorem HasGeodesicEquationAt.continuousAt_deriv_chartLocalCurve obtain ⟨v, a, -, -, ha, -⟩ := h exact ha.differentiableAt.continuousAt +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The moving-foot chart derivative of a continuous solution of the geodesic equation *is* its manifold derivative: `Ξ³` has intrinsic velocity `deriv (chartLocalCurve Ξ³ t) t ∈ T_{Ξ³ t} M` at the base time. This is the @@ -104,6 +107,7 @@ theorem HasGeodesicEquationAt.hasMFDerivAt {g : RiemannianMetric I M} simpa [writtenInExtChartAt, extChartAt_model_space_eq_id, Function.comp_def, hasFDerivWithinAt_univ] using hf +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The manifold velocity of a geodesic at the base time, read in the chart at the foot, is the chart derivative. -/ theorem HasGeodesicEquationAt.mfderiv_apply_one {g : RiemannianMetric I M} @@ -113,6 +117,7 @@ theorem HasGeodesicEquationAt.mfderiv_apply_one {g : RiemannianMetric I M} rw [(h.hasMFDerivAt hcont).mfderiv] exact one_smul ℝ _ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Chart-change transfer for the velocity reading (first order).** If `Ξ³` solves the geodesic equation at `Οƒ`, is continuous at `Οƒ`, and `Ξ³ Οƒ` lies in the chart at a basepoint `Ξ²`, then near `Οƒ` the reading of `Ξ³` @@ -148,6 +153,7 @@ theorem HasGeodesicEquationAt.eventually_hasDerivAt_extChartAt [I.Boundaryless] simp only [Function.comp_apply, chartLocalCurve_def] rw [(extChartAt I (Ξ³ Οƒ)).left_inv h5] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Value form of the chart-change transfer at the base time: the `Ξ²`-chart velocity of a geodesic at `Οƒ` is the coordinate change of the moving-foot chart velocity. -/ @@ -160,6 +166,7 @@ theorem HasGeodesicEquationAt.deriv_extChartAt_eq [I.Boundaryless] (deriv (chartLocalCurve (I := I) Ξ³ Οƒ) Οƒ) := ((h.eventually_hasDerivAt_extChartAt hcont hsrc).self_of_nhds).deriv +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The `Ξ²`-chart velocity of a geodesic is continuous at the base time: it is the (continuous) tangent coordinate change applied along the (continuous) curve to the (continuous-at-`Οƒ`) moving-foot chart velocity. -/ @@ -179,6 +186,7 @@ theorem HasGeodesicEquationAt.continuousAt_deriv_extChartAt [I.Boundaryless] ((continuousOn_tangentCoordChange (I := I) (Ξ³ Οƒ) Ξ²).continuousAt hmem).comp hcont exact (hA.clm_apply h.continuousAt_deriv_chartLocalCurve).congr heq.symm +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Geodesics are `CΒΉ`.** A continuous solution of the geodesic equation on an open set of times is continuously differentiable there as a curve into `M`. (do Carmo takes the regularity of geodesics for granted; it @@ -234,10 +242,12 @@ where `Ξ³` is not differentiable, as usual with `mfderiv`.) -/ def speedSq (g : RiemannianMetric I M) (Ξ³ : ℝ β†’ M) (t : ℝ) : ℝ := g.metricInner (Ξ³ t) (mfderiv π“˜(ℝ, ℝ) I Ξ³ t 1) (mfderiv π“˜(ℝ, ℝ) I Ξ³ t 1) +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in @[simp] theorem speedSq_def (g : RiemannianMetric I M) (Ξ³ : ℝ β†’ M) (t : ℝ) : speedSq (I := I) g Ξ³ t = g.metricInner (Ξ³ t) (mfderiv π“˜(ℝ, ℝ) I Ξ³ t 1) (mfderiv π“˜(ℝ, ℝ) I Ξ³ t 1) := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Near a base time `t`, the intrinsic squared speed of a geodesic agrees with its chart-Gram expression in the FIXED chart at `Ξ³ t`: reading everything in one chart, the squared speed at `Οƒ` is the Gram inner product @@ -273,6 +283,7 @@ theorem HasGeodesicEquationAt.speedSq_eq_chartMetricInner (deriv (chartLocalCurve (I := I) Ξ³ t) Οƒ) (deriv (chartLocalCurve (I := I) Ξ³ t) Οƒ) rw [hbridge, hread] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 3, Β§2 (remark after Def. 2.1), intrinsic form: along a continuous geodesic on an open set of times, the intrinsic squared speed `t ↦ ⟨γ'(t), Ξ³'(t)⟩_g` has vanishing derivative at every time. -/ @@ -290,6 +301,7 @@ theorem IsGeodesicOn.hasDerivAt_speedSq_zero {g : RiemannianMetric I M} exact (hΞ³ Ο„ h1).speedSq_eq_chartMetricInner ((hcont Ο„ h1).continuousAt (hs.mem_nhds h1)) h2 +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** do Carmo Ch. 3, Β§2: **geodesics have constant speed**, intrinsic form. Along a continuous geodesic on an open connected set of times, the intrinsic squared speed `⟨γ', Ξ³'⟩_g` is constant. -/ @@ -309,6 +321,7 @@ section Lipschitz variable {M : Type*} [PseudoEMetricSpace M] [ChartedSpace H M] [IsManifold I ∞ M] [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Geodesics are locally Lipschitz** (do Carmo Ch. 7, Β§2, the inequality `d(Ξ³(s_n), Ξ³(s_m)) ≀ |s_n - s_m|` in the proof of Theorem 2.8, c) ⟹ d), stated for arbitrary constant speed): on a connected open set of @@ -346,6 +359,7 @@ section LipschitzDist variable {M : Type*} [MetricSpace M] [ChartedSpace H M] [IsManifold I ∞ M] [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Geodesics are locally Lipschitz, `dist` form: the inequality consumed by the Cauchy-sequence argument of do Carmo Ch. 7, Theorem 2.8, c) ⟹ d). -/ diff --git a/OpenGALib/Riemannian/Geodesic/HopfRinow/CurveReadback.lean b/OpenGALib/Riemannian/Geodesic/HopfRinow/CurveReadback.lean index e1f0c3bf..e9991b52 100644 --- a/OpenGALib/Riemannian/Geodesic/HopfRinow/CurveReadback.lean +++ b/OpenGALib/Riemannian/Geodesic/HopfRinow/CurveReadback.lean @@ -17,12 +17,12 @@ the two along any interval on which the curve stays in one chart source: * `mfderiv_eq_of_hasDerivAt_extChartAt` β€” value form. * `enorm_mfderiv_eq_of_hasDerivAt_extChartAt` β€” under the Riemannian-bundle instance of `g`, the fibre enorm of the velocity is the chart-Gram norm - `√⟨uΜ‡(t), uΜ‡(t)⟩_{u(t)}` of the coordinate velocity. + `√⟨u'(t), u'(t)⟩_{u(t)}` of the coordinate velocity. * `ContMDiffOn.contDiffOn_extChartAt_comp` β€” the chart reading of a `CΒΉ` curve is `CΒΉ` (as a map `ℝ β†’ E`) on any set mapped into the chart source. * `pathELength_eq_ofReal_integral_chartMetricInner` β€” **the length bridge**: for a `CΒΉ` curve `Ξ³` on `[a, b]` staying in the chart source at `Ξ±`, - `pathELength I Ξ³ a b = ∫_a^b √⟨uΜ‡(t), uΜ‡(t)⟩_{u(t)} dt` with + `pathELength I Ξ³ a b = ∫_a^b √⟨u'(t), u'(t)⟩_{u(t)} dt` with `u = Ο†_Ξ± ∘ Ξ³` the chart reading (derivative taken within `[a, b]`). Reference: do Carmo, *Riemannian Geometry*, Ch. 7 Β§2 (Definition 2.4) and the @@ -32,7 +32,6 @@ length computations in the proof of Ch. 3, Proposition 3.6. open Bundle Manifold MeasureTheory Set open scoped Manifold Topology ContDiff ENNReal -set_option linter.unusedSectionVars false noncomputable section @@ -40,10 +39,11 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] [I.Boundaryless] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** A curve whose reading in the chart at `Ξ±` has a derivative `ΞΎ` at a time `t` (with `Ξ³` continuous at `t` and `Ξ³ t` in the chart source) is manifold- differentiable at `t`, with intrinsic velocity the tangent-coordinate-change @@ -80,6 +80,7 @@ theorem hasMFDerivAt_of_hasDerivAt_extChartAt {Ξ³ : ℝ β†’ M} {t : ℝ} {ΞΎ : E simpa [writtenInExtChartAt, extChartAt_model_space_eq_id, Function.comp_def, hasFDerivWithinAt_univ] using hf +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Value form: the intrinsic velocity of the curve is the tangent coordinate change of the coordinate velocity read in the chart at `Ξ±`. -/ theorem mfderiv_eq_of_hasDerivAt_extChartAt {Ξ³ : ℝ β†’ M} {t : ℝ} {ΞΎ : E} {Ξ± : M} @@ -89,9 +90,10 @@ theorem mfderiv_eq_of_hasDerivAt_extChartAt {Ξ³ : ℝ β†’ M} {t : ℝ} {ΞΎ : E} rw [(hasMFDerivAt_of_hasDerivAt_extChartAt hcont hsrc hd).mfderiv] exact one_smul ℝ _ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Under the Riemannian-bundle instance of `g`, the fibre enorm of the intrinsic velocity of a curve equals the chart-Gram norm of its coordinate -velocity, read in the fixed chart at `Ξ±`: `β€–Ξ³'(t)β€–β‚‘ = √⟨uΜ‡(t), uΜ‡(t)⟩_{u(t)}` +velocity, read in the fixed chart at `Ξ±`: `β€–Ξ³'(t)β€–β‚‘ = √⟨u'(t), u'(t)⟩_{u(t)}` with `u = Ο†_Ξ± ∘ Ξ³`. -/ theorem enorm_mfderiv_eq_of_hasDerivAt_extChartAt (g : RiemannianMetric I M) {Ξ³ : ℝ β†’ M} {t : ℝ} {ΞΎ : E} {Ξ± : M} @@ -107,6 +109,7 @@ theorem enorm_mfderiv_eq_of_hasDerivAt_extChartAt (g : RiemannianMetric I M) chartMetricInner_extChartAt_eq_metricInner (I := I) g Ξ± hsrc ΞΎ ΞΎ, trivializationAt_symm_eq_tangentCoordChange (I := I) Ξ± hsrc ΞΎ] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The reading of a `CΒΉ` curve in the chart at `Ξ±` is a `CΒΉ` map `ℝ β†’ E` on any set of times mapped into the chart source. -/ theorem contDiffOn_extChartAt_comp {Ξ³ : ℝ β†’ M} {s : Set ℝ} {Ξ± : M} @@ -115,6 +118,7 @@ theorem contDiffOn_extChartAt_comp {Ξ³ : ℝ β†’ M} {s : Set ℝ} {Ξ± : M} rw [← contMDiffOn_iff_contDiffOn] exact (contMDiffOn_extChartAt (n := 1)).comp hΞ³ fun t ht => hsrc t ht +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The length bridge** (do Carmo Ch. 7, Definition 2.4, read in one chart): the mathlib path length of a `CΒΉ` curve `Ξ³` over `[a, b]`, along which `Ξ³` stays in the chart source at `Ξ±`, is the interval integral of the chart-Gram diff --git a/OpenGALib/Riemannian/Geodesic/HopfRinow/EVariationLePathELength.lean b/OpenGALib/Riemannian/Geodesic/HopfRinow/EVariationLePathELength.lean index c6243e53..7895b3a1 100644 --- a/OpenGALib/Riemannian/Geodesic/HopfRinow/EVariationLePathELength.lean +++ b/OpenGALib/Riemannian/Geodesic/HopfRinow/EVariationLePathELength.lean @@ -2,11 +2,10 @@ import Mathlib.Geometry.Manifold.Riemannian.Basic import OpenGALib.MetricGeometry.LengthSpace /-! -# β‘  `dist = β¨… pathLength` bridge β€” analytic core +# Metric variation is bounded by Riemannian path length -The key lemma behind `Bridges/RiemannianToLength.lean`'s remaining `sorry` -(`β¨… Ξ³, pathLength Ξ³ ≀ edist x y`): for a `CΒΉ` path the metric `eVariationOn` -(OpenGA `pathLength`) is bounded by the tangent integral (`Manifold.pathELength`). +For a `CΒΉ` path, the metric `eVariationOn` (and hence OpenGA's +`pathLength`) is bounded by the tangent integral `Manifold.pathELength`. Proof map (do Carmo Ch. 7 Β§2 / Burago–Burago–Ivanov Β§2.7.1): ``` @@ -15,9 +14,6 @@ eVariationOn (↑γ) univ = ⨆_partitions Ξ£ edist (Ξ³ tα΅’β‚Šβ‚) (Ξ³ tα΅’) = pathELength I Ξ³.extend 0 1 -- pathELength_add telescoping ``` -Once proved, replace the bridge `sorry` with -`le_iInfβ‚‚ fun Ξ³ hΞ³ ↦ iInf_le_of_le Ξ³ (pathLength_le_pathELength Ξ³ hΞ³)` -(after `rw [IsRiemannianManifold.out, riemannianEDist]`). -/ open Bundle Set Topology @@ -40,10 +36,9 @@ theorem edist_le_pathELength_of_cmdiff {Ξ³ : ℝ β†’ M} {a b : ℝ} rw [IsRiemannianManifold.out (I := I) (Ξ³ a) (Ξ³ b)] exact Manifold.riemannianEDist_le_pathELength hΞ³ rfl rfl hab -/-- **Math.** **Key lemma (β‘ ).** For a `CΒΉ` path `Ξ³ : ℝ β†’ M` smooth on `[0,1]`, the +/-- **Math.** **Key lemma (1).** For a `CΒΉ` path `Ξ³ : ℝ β†’ M` smooth on `[0,1]`, the metric `eVariationOn` of `Ξ³` over `[0,1]` is bounded by the tangent-integral length -`pathELength I Ξ³ 0 1`. This is the sole remaining content of the metric=length -bridge `Bridges/RiemannianToLength.lean`. -/ +`pathELength I Ξ³ 0 1`. -/ theorem eVariationOn_le_pathELength {Ξ³ : ℝ β†’ M} (hΞ³ : CMDiff[Icc 0 1] 1 Ξ³) : eVariationOn Ξ³ (Icc 0 1) ≀ Manifold.pathELength I Ξ³ 0 1 := by diff --git a/OpenGALib/Riemannian/Geodesic/HopfRinow/GramBound.lean b/OpenGALib/Riemannian/Geodesic/HopfRinow/GramBound.lean index a8b14c71..6745b2a8 100644 --- a/OpenGALib/Riemannian/Geodesic/HopfRinow/GramBound.lean +++ b/OpenGALib/Riemannian/Geodesic/HopfRinow/GramBound.lean @@ -2,7 +2,6 @@ import OpenGALib.Riemannian.Geodesic.EquationTransfer import OpenGALib.Riemannian.Geodesic.HopfRinow.ConstantSpeed import OpenGALib.Riemannian.Exponential.GaussLemma -set_option linter.unusedSectionVars false /-! # Local comparison of coordinate and Riemannian norms @@ -40,11 +39,12 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] in /-- **Math.** **Local coordinate-norm bound by the chart-Gram form.** Near the chart image of `pβ‚€`, the positive-definite Gram form dominates a fixed positive multiple of the squared coordinate norm. -/ @@ -150,9 +150,9 @@ theorem exists_sq_norm_le_chartMetricInner (g : RiemannianMetric I M) (pβ‚€ : M) -- Normalise `w` onto the sphere and scale the bound back up. have hnw : β€–wβ€– β‰  0 := norm_ne_zero_iff.mpr hw have hnwpos : (0 : ℝ) < β€–wβ€– := norm_pos_iff.mpr hw - have hΕ΅S : β€–w‖⁻¹ β€’ w ∈ Metric.sphere (0 : E) 1 := by + have hwS : β€–w‖⁻¹ β€’ w ∈ Metric.sphere (0 : E) 1 := by rw [mem_sphere_iff_norm, sub_zero, norm_smul, norm_inv, norm_norm, inv_mul_cancelβ‚€ hnw] - have hmem : ((y, β€–w‖⁻¹ β€’ w) : E Γ— E) ∈ u Γ—Λ’ v := ⟨hy.1, hSv hΕ΅S⟩ + have hmem : ((y, β€–w‖⁻¹ β€’ w) : E Γ— E) ∈ u Γ—Λ’ v := ⟨hy.1, hSv hwS⟩ have hgt : m / 2 < chartMetricInner (I := I) g pβ‚€ y (β€–w‖⁻¹ β€’ w) (β€–w‖⁻¹ β€’ w) := (huv hmem).2 have hexp : chartMetricInner (I := I) g pβ‚€ y (β€–w‖⁻¹ β€’ w) (β€–w‖⁻¹ β€’ w) @@ -170,6 +170,7 @@ theorem exists_sq_norm_le_chartMetricInner (g : RiemannianMetric I M) (pβ‚€ : M) rw [div_mul_eq_mul_div, le_div_iffβ‚€ hm] linarith [hkey] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Pole-generalised speed bridge: the intrinsic squared speed of a geodesic at a time `Οƒ` equals the chart-Gram reading in the chart at *any* basepoint `Ξ²` whose source contains the foot `Ξ³ Οƒ`. (The `ConstantSpeed.lean` diff --git a/OpenGALib/Riemannian/Geodesic/HopfRinow/MetricBridge.lean b/OpenGALib/Riemannian/Geodesic/HopfRinow/MetricBridge.lean index 6013865b..ef508eac 100644 --- a/OpenGALib/Riemannian/Geodesic/HopfRinow/MetricBridge.lean +++ b/OpenGALib/Riemannian/Geodesic/HopfRinow/MetricBridge.lean @@ -16,8 +16,8 @@ Hopf–Rinow constant-speed layer needs to compare: vectors into the fibre `T_bM`. The core statement `chartMetricInner_extChartAt_eq_metricInner` shows these agree at -`y = extChartAt I Ξ± b`, so the coordinate speed `chartMetricInner g Ξ± (Ο†_Ξ± c t) Δ‹ Δ‹` -of a curve is literally the intrinsic squared speed `g.metricInner (c t) Δ‹ Δ‹`. +`y = extChartAt I Ξ± b`, so the coordinate speed `chartMetricInner g Ξ± (Ο†_Ξ± c t) c' c'` +of a curve is literally the intrinsic squared speed `g.metricInner (c t) c' c'`. Finally, under the `Bundle.RiemannianBundle` instance carried by `g`, the fibre `(e)norm` of a tangent vector is `√ (g.metricInner x v v)` @@ -31,17 +31,17 @@ Reference: do Carmo, *Riemannian Geometry*, Ch. 7 Β§2 (distance/length) and Ch. open scoped Manifold Topology ContDiff ENNReal open Set Bundle -set_option linter.unusedSectionVars false noncomputable section namespace Riemannian variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Readback expansion: the inverse trivialization at `Ξ±`, applied at a foot `b` to a coordinate vector `a : E`, is the linear combination of chart-basis fibre vectors with the chart coordinates of `a`. Holds unconditionally: off the base @@ -56,6 +56,7 @@ theorem trivializationAt_symm_eq_sum_chartBasisVecFiber (Ξ± : M) (b : M) (a : E) rw [map_smul] rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Bilinear expansion of the intrinsic metric against two readbacks: `g_b(e.symm b a, e.symm b c) = βˆ‘α΅’β±Ό G_{ij}(b) aⁱ cΚ²`, where `G` is the chart Gram matrix. -/ @@ -74,6 +75,7 @@ theorem metricInner_trivializationAt_symm (g : RiemannianMetric I M) (Ξ± : M) (b rw [Tensor.chartGramMatrix_apply] ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart-Gram inner product equals the intrinsic inner product of the readbacks, at the chart image `extChartAt I Ξ± b` of a foot `b` in the chart source. -/ theorem chartMetricInner_extChartAt_eq_metricInner (g : RiemannianMetric I M) (Ξ± : M) {b : M} @@ -86,6 +88,7 @@ theorem chartMetricInner_extChartAt_eq_metricInner (g : RiemannianMetric I M) ( have hinv : (extChartAt I Ξ±).symm (extChartAt I Ξ± b) = b := (extChartAt I Ξ±).left_inv hsrc simp only [chartMetricInner_def, chartGramOnE_def, hinv] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** General foot version of the readback in terms of the tangent coordinate change: over a foot `b` in the chart source, the inverse trivialization at `Ξ±` is `tangentCoordChange I Ξ± b b`. -/ @@ -97,6 +100,7 @@ theorem trivializationAt_symm_eq_tangentCoordChange (Ξ± : M) {b : M} = (trivializationAt E (TangentSpace I) Ξ±).symmL ℝ b a from rfl, h] rfl +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** At the basepoint the readback is the identity: the inverse trivialization at `Ξ±`, evaluated over its own foot `Ξ±`, is the identity of the fibre. -/ theorem trivializationAt_symm_self (Ξ± : M) (a : E) : @@ -104,6 +108,7 @@ theorem trivializationAt_symm_self (Ξ± : M) (a : E) : rw [trivializationAt_symm_eq_tangentCoordChange Ξ± (mem_chart_source H Ξ±) a] exact tangentCoordChange_self (I := I) (x := Ξ±) (z := Ξ±) (v := a) (mem_extChartAt_source Ξ±) +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Fibre norm under the Riemannian-bundle instance of `g`: `β€–vβ€– = √ (g_x(v,v))`. -/ theorem norm_tangent_eq_sqrt_metricInner (g : RiemannianMetric I M) (x : M) @@ -114,6 +119,7 @@ theorem norm_tangent_eq_sqrt_metricInner (g : RiemannianMetric I M) (x : M) rw [norm_eq_sqrt_real_inner v] rfl +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Fibre enorm under the Riemannian-bundle instance of `g`: `β€–vβ€–β‚‘ = ENNReal.ofReal (√ (g_x(v,v)))`. -/ theorem enorm_tangent_eq_sqrt_metricInner (g : RiemannianMetric I M) (x : M) @@ -133,6 +139,7 @@ This is the zeroth-order layer of the change-of-chart law for the chart coordinate, which brings in the second derivative of the transition). -/ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The Ξ²-chart frame vector at a common foot `x` is the Ξ±-readback of the tangent coordinate change of the model basis vector: the two chart frames of `T_xM` differ by the derivative of the chart transition. -/ @@ -151,6 +158,7 @@ theorem chartBasisVecFiber_eq_symm_tangentCoordChange (Ξ± Ξ² : M) {x : M} trivializationAt_symm_eq_tangentCoordChange Ξ± hxΞ±, tangentCoordChange_comp (I := I) ⟨⟨hΞ², hα⟩, hx⟩] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Change of chart for the Gram matrix** (`(0,2)`-tensor transformation law, the zeroth-order layer of the Christoffel change-of-chart law): at a common foot `x`, @@ -170,6 +178,7 @@ theorem chartGramMatrix_change (g : RiemannianMetric I M) (Ξ± Ξ² : M) {x : M} ← chartBasisVecFiber_eq_symm_tangentCoordChange Ξ± Ξ² hxΞ± hxΞ² j] rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Change of chart for the chart-Gram inner product**: reading the same foot `x` in two charts, the Ξ²-chart Gram pairing of two coordinate vectors is the Ξ±-chart Gram pairing of their tangent coordinate changes β€” the pairing diff --git a/OpenGALib/Riemannian/Geodesic/InitialVelocity.lean b/OpenGALib/Riemannian/Geodesic/InitialVelocity.lean index 8e288788..b9dbc95e 100644 --- a/OpenGALib/Riemannian/Geodesic/InitialVelocity.lean +++ b/OpenGALib/Riemannian/Geodesic/InitialVelocity.lean @@ -1,6 +1,5 @@ import OpenGALib.Riemannian.Geodesic.Homogeneity -set_option linter.unusedSectionVars false /-! # Initial velocity and the geodesic equation at the initial time @@ -45,7 +44,7 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] @@ -53,6 +52,7 @@ section CoordinateBridges variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The chart-`Ξ±` fibre coordinate of a tangent vector attached at `Ξ±` itself is the vector: the trivialization at a point is the identity on the fibre over that point. -/ @@ -63,6 +63,7 @@ lemma chartFiberCoord_mk (Ξ± : M) (w : TangentSpace I Ξ±) : rw [h] exact tangentCoordChange_self (I := I) (mem_extChartAt_source Ξ±) +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** One level up: the trivialization of `T(TM)` at `⟨α, 0⟩` is the identity on the fibre over any point `⟨α, w⟩` with the same foot `Ξ±` (the charts of `TM` at `⟨α, w⟩` and `⟨α, 0⟩` coincide, both being based at the foot `Ξ±`). -/ @@ -79,6 +80,7 @@ lemma trivializationAt_tangent_tangent_mk_snd (Ξ± : M) (w : E) rw [h] exact tangentCoordChange_self (I := I.tangent) (mem_extChartAt_source _) +omit [I.Boundaryless] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Over its own foot, the chart-fixed geodesic spray in definitional coordinates IS its coordinate fibre value: at a point `⟨α, w⟩` attached at the chart basepoint `Ξ±`, the trivialization of `T(TM)` at `⟨α, 0⟩` is the identity. -/ @@ -92,6 +94,7 @@ lemma geodesicVectorFieldChart_mk (g : RiemannianMetric I M) (Ξ± : M) (w : E) : rw [trivializationAt_apply_geodesicVectorFieldChart (I := I) g Ξ± hmem] at h2 exact h2.symm +omit [I.Boundaryless] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The coordinate change from the chart of `TM` at a point `q` to the chart at the basepoint (any point with foot `Ξ±`) sends the definitional presentation of the chart-fixed geodesic spray to its coordinate fibre value. -/ @@ -113,8 +116,9 @@ end CoordinateBridges section EventualSystem -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] +omit [I.Boundaryless] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The chart-`p` reading of a geodesic lift solves the first-order geodesic system.** If `f` is an integral curve of the chart-`p`-fixed geodesic spray at `0` with `f 0 = ⟨p, v⟩`, then near `0` the pair @@ -161,8 +165,9 @@ end EventualSystem section InitialData -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] +omit [I.Boundaryless] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **A geodesic leaves `p` with velocity `v`.** For a geodesic witness with initial data `(p, v)` defined on a neighbourhood of `0`, the chart-`p` reading `s ↦ Ο†_p(Ξ³ s)` has derivative `v` at `s = 0`. -/ @@ -194,6 +199,7 @@ theorem IsGeodesicOnWithInitial.hasDerivAt_extChartAt_zero rw [hval] at hfst exact hfst +omit [I.Boundaryless] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **A geodesic witness satisfies the intrinsic geodesic equation at the initial time.** This bridges the spray/integral-curve formulation back to the second-order moving-foot geodesic equation, at `t = 0`: the chart-`p` reading @@ -279,6 +285,7 @@ end InitialData section EquationCongruence +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The moving-foot geodesic equation at time `t` only depends on the curve near `t`: it transfers across eventual equality of curves. -/ theorem hasGeodesicEquationAt_congr_of_eventuallyEq @@ -308,8 +315,9 @@ end EquationCongruence section MaximalGeodesicTransfer -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The canonical maximal geodesic agrees with every witness** on the witness's interval, under the chart-validity clause that all witnesses with initial data `(p, v)` keep their foot in the chart at `p`. This is the @@ -337,6 +345,7 @@ theorem maximalGeodesic_eq_witness (fun t ht => hsrc _ _ hγ₁ t (inter_subset_left ht)) exact heq ⟨hs₁, hs⟩ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Near `0`, the canonical maximal geodesic coincides with the chosen local witness (under the chart-validity clause). -/ theorem maximalGeodesic_eventuallyEq_witness @@ -354,6 +363,7 @@ theorem maximalGeodesic_eventuallyEq_witness filter_upwards [hJo.mem_nhds h0β‚€] with s hs exact maximalGeodesic_eq_witness (I := I) hsrc hΞ³β‚€ hJo hJc h0β‚€ hs +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The canonical maximal geodesic leaves `p` with velocity `v`**: read in the chart at `p`, `s ↦ Ο†_p(Ξ³(s, p, v))` has derivative `v` at `s = 0` (under the chart-validity clause for `(p, v)`-witnesses). -/ @@ -370,6 +380,7 @@ theorem hasDerivAt_extChartAt_maximalGeodesic filter_upwards [hev] with s hs rw [hs] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **The canonical maximal geodesic satisfies the intrinsic geodesic equation at the initial time** (under the chart-validity clause for `(p, v)`-witnesses). -/ diff --git a/OpenGALib/Riemannian/Geodesic/IntrinsicUniqueness.lean b/OpenGALib/Riemannian/Geodesic/IntrinsicUniqueness.lean index a4ca7631..0f06e088 100644 --- a/OpenGALib/Riemannian/Geodesic/IntrinsicUniqueness.lean +++ b/OpenGALib/Riemannian/Geodesic/IntrinsicUniqueness.lean @@ -2,7 +2,6 @@ import OpenGALib.Riemannian.Geodesic.EquationTransfer import OpenGALib.Riemannian.Geodesic.ChartFlow import OpenGALib.Riemannian.Geodesic.HopfRinow.ConstantSpeed -set_option linter.unusedSectionVars false /-! # Uniqueness of intrinsic geodesics @@ -55,11 +54,12 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Local uniqueness of intrinsic geodesics.** If two intrinsic geodesics on an open set `s` share their position and their chart-`Ξ²` velocity reading at a time `tβ‚€ ∈ s` (for any chart basepoint `Ξ²` whose @@ -182,6 +182,7 @@ private lemma eq_at_closure_eventuallyEq_of_t2 [T2Space M] exact (hΟ„ : γ₁ =αΆ [𝓝 Ο„] Ξ³β‚‚).eq_of_nhds exact tendsto_nhds_unique (h₁t.congr' heq) hβ‚‚t +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The open-closed propagation core of intrinsic geodesic uniqueness, with the closure-point position match supplied as a hypothesis `hclosurePos` β€” the only step of the clopen argument that needs a separation property of `M`. @@ -267,6 +268,7 @@ private theorem eqOn_of_deriv_chartReading_eq_aux hconn.subset_of_closure_inter_subset hS_open ⟨tβ‚€, htβ‚€, htβ‚€S⟩ hclosed exact fun t ht => ((hsS ht) : γ₁ =αΆ [𝓝 t] Ξ³β‚‚).eq_of_nhds +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Uniqueness of intrinsic geodesics** (do Carmo Ch. 3, uniqueness in Theorem 2.2, intrinsic interval form). Two continuous intrinsic geodesics on an open preconnected set `s` of times that share their position and chart diff --git a/OpenGALib/Riemannian/Geodesic/LinearODE.lean b/OpenGALib/Riemannian/Geodesic/LinearODE.lean index 73458cc8..cab2abda 100644 --- a/OpenGALib/Riemannian/Geodesic/LinearODE.lean +++ b/OpenGALib/Riemannian/Geodesic/LinearODE.lean @@ -7,7 +7,7 @@ import Mathlib.Analysis.ODE.Gronwall Mathlib's Picard–LindelΓΆf theory (`Mathlib.Analysis.ODE.PicardLindelof`) proves only *local* existence: from `IsPicardLindelof` one gets a solution on a time interval short enough that the a-priori bound keeps the trajectory inside a fixed ball. For a **linear** -ODE `VΜ‡(t) = A(t) V(t)` with a continuous bounded coefficient `A : ℝ β†’ (E β†’L[ℝ] E)` the +ODE `V'(t) = A(t) V(t)` with a continuous bounded coefficient `A : ℝ β†’ (E β†’L[ℝ] E)` the solution exists on *any* compact interval, but that global statement is not in mathlib. This file supplies it, as reusable infrastructure: @@ -19,15 +19,14 @@ This file supplies it, as reusable infrastructure: compact `[a,b]`, obtained by chopping `[a,b]` into finitely many short pieces, solving each with the short-time lemma, and gluing the pieces at the junctions. -The parallel-transport ODE `VΜ‡ = -Ξ“(uΜ‡, V)(u)` (do Carmo Ch. 2, Prop. 2.6) is the special -case `A(t) = -chartChristoffelContractionRight g Ξ± (uΜ‡ t) (u t)`; see +The parallel-transport ODE `V' = -Ξ“(u', V)(u)` (do Carmo Ch. 2, Prop. 2.6) is the special +case `A(t) = -chartChristoffelContractionRight g Ξ± (u' t) (u t)`; see `OpenGALib/Riemannian/Geodesic/CovariantDerivative.lean`. -/ open scoped Topology NNReal open Set Metric -set_option linter.unusedSectionVars false noncomputable section @@ -38,7 +37,7 @@ variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [CompleteSpace E /-- **Short-time existence for a linear ODE.** If the coefficient `A : ℝ β†’ (E β†’L[ℝ] E)` is continuous on `[a,b]`, bounded there by `K`, and the interval is short in the sense `(b-a)Β·K ≀ 1/2`, then for any initial value `xβ‚€` there is a curve `V` with `V a = xβ‚€` -solving `VΜ‡(t) = A(t) V(t)` on `[a,b]`. -/ +solving `V'(t) = A(t) V(t)` on `[a,b]`. -/ theorem exists_hasDerivWithinAt_of_small {a b : ℝ} (hab : a ≀ b) (A : ℝ β†’ E β†’L[ℝ] E) (xβ‚€ : E) {K : ℝβ‰₯0} (hcont : ContinuousOn A (Icc a b)) (hK : βˆ€ t ∈ Icc a b, β€–A tβ€–β‚Š ≀ K) (hsmall : (b - a) * (K : ℝ) ≀ 1 / 2) : @@ -75,7 +74,8 @@ theorem exists_hasDerivWithinAt_of_small {a b : ℝ} (hab : a ≀ b) (A : ℝ obtain ⟨V, hV0, hVd⟩ := hPL.exists_eq_forall_mem_Icc_hasDerivWithinAtβ‚€ exact ⟨V, hV0, hVd⟩ -/-- **Gluing two solutions of a linear ODE.** If `V₁` solves `VΜ‡ = A(t)V` on `[a,c]` and +omit [CompleteSpace E] in +/-- **Gluing two solutions of a linear ODE.** If `V₁` solves `V' = A(t)V` on `[a,c]` and `Vβ‚‚` solves it on `[c,b]` with the same value at the junction `c`, the concatenation `t ↦ if t ≀ c then V₁ t else Vβ‚‚ t` solves it on all of `[a,b]`, keeping the left-endpoint value `V₁ a`. This is the continuation step that upgrades short-time to global existence. -/ @@ -136,7 +136,7 @@ theorem exists_hasDerivWithinAt_glue {a c b : ℝ} (hac : a ≀ c) (hcb : c ≀ /-- **Global existence for a linear ODE with continuous bounded coefficient.** On *any* compact interval `[a,b]`, for a coefficient `A : ℝ β†’ (E β†’L[ℝ] E)` continuous and bounded by `K`, and any initial value `xβ‚€`, there is a curve `V` with `V a = xβ‚€` solving -`VΜ‡(t) = A(t) V(t)` on `[a,b]`. The interval is cut into `⌈2(b-a)KβŒ‰+1` short pieces, each +`V'(t) = A(t) V(t)` on `[a,b]`. The interval is cut into `⌈2(b-a)KβŒ‰+1` short pieces, each solved by `exists_hasDerivWithinAt_of_small`, and the pieces are glued with `exists_hasDerivWithinAt_glue`. This is the global-existence half missing from mathlib's (purely local) Picard–LindelΓΆf theory, and the existence half of parallel transport @@ -213,10 +213,11 @@ The existence engine above produces *a* solution; for a *linear* ODE it is uniqu a linear isomorphism (its inverse runs the ODE backwards). This is the abstract content behind do Carmo's parallel transport `P_c` (Ch. 2, Prop. 2.6). -/ -/-- `V` **solves** the linear ODE `VΜ‡ = A(t) V` on the compact interval `[a,b]`. -/ +/-- `V` **solves** the linear ODE `V' = A(t) V` on the compact interval `[a,b]`. -/ def IsSolOn (A : ℝ β†’ E β†’L[ℝ] E) (a b : ℝ) (V : ℝ β†’ E) : Prop := βˆ€ t ∈ Icc a b, HasDerivWithinAt V (A t (V t)) (Icc a b) t +omit [CompleteSpace E] in theorem IsSolOn.continuousOn {A : ℝ β†’ E β†’L[ℝ] E} {a b : ℝ} {V : ℝ β†’ E} (h : IsSolOn A a b V) : ContinuousOn V (Icc a b) := fun t ht => (h t ht).continuousWithinAt @@ -236,7 +237,8 @@ theorem Icc_mem_nhdsWithin_Iic {a b t : ℝ} (ht : t ∈ Ioc a b) : Icc a b ∈ rintro x ⟨hxa, hxt⟩ exact ⟨le_of_lt hxa, le_trans hxt ht.2⟩ -/-- **Forward uniqueness.** Two solutions of `VΜ‡ = A(t) V` on `[a,b]` that agree at the +omit [CompleteSpace E] in +/-- **Forward uniqueness.** Two solutions of `V' = A(t) V` on `[a,b]` that agree at the left endpoint `a` agree on all of `[a,b]` (GrΓΆnwall via `ODE_solution_unique_of_mem_Icc_right`; the Lipschitz constant of the RHS is the operator norm bound `K` on `A`). -/ @@ -254,7 +256,8 @@ theorem IsSolOn.eqOn_of_left {A : ℝ β†’ E β†’L[ℝ] E} {a b : ℝ} {K : ℝβ‰₯ (fun t ht => (hW t ⟨ht.1, ht.2.le⟩).mono_of_mem_nhdsWithin (Icc_mem_nhdsWithin_Ici ht)) (fun _ _ => mem_univ _) ha -/-- **Backward uniqueness.** Two solutions of `VΜ‡ = A(t) V` on `[a,b]` that agree at the +omit [CompleteSpace E] in +/-- **Backward uniqueness.** Two solutions of `V' = A(t) V` on `[a,b]` that agree at the right endpoint `b` agree on all of `[a,b]` (time-reversed GrΓΆnwall via `ODE_solution_unique_of_mem_Icc_left`). This is what makes the endpoint flow injective. -/ theorem IsSolOn.eqOn_of_right {A : ℝ β†’ E β†’L[ℝ] E} {a b : ℝ} {K : ℝβ‰₯0} @@ -271,6 +274,7 @@ theorem IsSolOn.eqOn_of_right {A : ℝ β†’ E β†’L[ℝ] E} {a b : ℝ} {K : ℝ (fun t ht => (hW t ⟨ht.1.le, ht.2⟩).mono_of_mem_nhdsWithin (Icc_mem_nhdsWithin_Iic ht)) (fun _ _ => mem_univ _) hb +omit [CompleteSpace E] in /-- Superposition: for a *linear* ODE the sum of two solutions is a solution (its value at the left endpoint is the sum of the two initial values). -/ theorem IsSolOn.add {A : ℝ β†’ E β†’L[ℝ] E} {a b : ℝ} {V W : ℝ β†’ E} @@ -279,6 +283,7 @@ theorem IsSolOn.add {A : ℝ β†’ E β†’L[ℝ] E} {a b : ℝ} {V W : ℝ β†’ E} have h := (hV t ht).add (hW t ht) simpa only [Pi.add_apply, map_add] using h +omit [CompleteSpace E] in /-- Superposition: a scalar multiple of a solution is a solution. -/ theorem IsSolOn.const_smul {A : ℝ β†’ E β†’L[ℝ] E} {a b : ℝ} (c : ℝ) {V : ℝ β†’ E} (hV : IsSolOn A a b V) : IsSolOn A a b (c β€’ V) := by @@ -288,7 +293,7 @@ theorem IsSolOn.const_smul {A : ℝ β†’ E β†’L[ℝ] E} {a b : ℝ} (c : ℝ) {V variable {A : ℝ β†’ E β†’L[ℝ] E} {a b : ℝ} {K : ℝβ‰₯0} -/-- A chosen solution of `VΜ‡ = A(t) V` on `[a,b]` with prescribed left-endpoint value `xβ‚€`, +/-- A chosen solution of `V' = A(t) V` on `[a,b]` with prescribed left-endpoint value `xβ‚€`, extracted from global existence (`exists_hasDerivWithinAt_Icc`). -/ noncomputable def solOf (hab : a ≀ b) (hcont : ContinuousOn A (Icc a b)) (hK : βˆ€ t ∈ Icc a b, β€–A tβ€–β‚Š ≀ K) (xβ‚€ : E) : ℝ β†’ E := @@ -302,7 +307,7 @@ theorem solOf_isSolOn (hab : a ≀ b) (hcont : ContinuousOn A (Icc a b)) (hK : βˆ€ t ∈ Icc a b, β€–A tβ€–β‚Š ≀ K) (xβ‚€ : E) : IsSolOn A a b (solOf hab hcont hK xβ‚€) := (Classical.choose_spec (exists_hasDerivWithinAt_Icc hab A xβ‚€ hcont hK)).2 -/-- **The linear flow map** `xβ‚€ ↦ V(b)` of `VΜ‡ = A(t) V`: the value at the right endpoint of +/-- **The linear flow map** `xβ‚€ ↦ V(b)` of `V' = A(t) V`: the value at the right endpoint of the solution starting at `xβ‚€`. It is `ℝ`-linear because the ODE is linear (superposition + forward uniqueness). This is the abstract parallel transport operator. -/ noncomputable def flowMap (hab : a ≀ b) (hcont : ContinuousOn A (Icc a b)) diff --git a/OpenGALib/Riemannian/Geodesic/MaximalInterval.lean b/OpenGALib/Riemannian/Geodesic/MaximalInterval.lean index 85d3a117..1e132633 100644 --- a/OpenGALib/Riemannian/Geodesic/MaximalInterval.lean +++ b/OpenGALib/Riemannian/Geodesic/MaximalInterval.lean @@ -4,7 +4,6 @@ import OpenGALib.Riemannian.Geodesic.Uniqueness import Mathlib.Geometry.Manifold.Riemannian.PathELength import Mathlib.MeasureTheory.Integral.IntervalIntegral.Basic -set_option linter.unusedSectionVars false /-! # Maximal interval of definition for a geodesic with prescribed initial data @@ -68,10 +67,10 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] /-- **Math.** `Ξ³` is a geodesic on `s` with initial datum `(p, v)` at time `0` if @@ -88,6 +87,7 @@ def IsGeodesicOnWithInitial f 0 = (⟨p, v⟩ : TangentBundle I M) ∧ IsMIntegralCurveOn f (geodesicVectorFieldChart (I := I) g p) s +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** An initial-data geodesic on `s` is, at every interior point `t` of `s` (i.e. `s ∈ 𝓝 t`) whose foot `Ξ³ t` still lies in the base chart-source `(chartAt H p).source`, a local spray geodesic `IsGeodesicAt g Ξ³ t` with @@ -110,6 +110,7 @@ lemma IsGeodesicOnWithInitial.isGeodesicAt refine ⟨p, f, hproj, ?_, hf.isMIntegralCurveAt ht⟩ rw [hproj t]; exact ht_src +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The starting point is forced: if `IsGeodesicOnWithInitial g Ξ³ s p v` holds, then `Ξ³ 0 = p`. -/ lemma IsGeodesicOnWithInitial.start_eq @@ -122,6 +123,7 @@ lemma IsGeodesicOnWithInitial.start_eq simp [hf0] at h exact h.symm +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** `IsGeodesicOnWithInitial` is monotone in the set. -/ lemma IsGeodesicOnWithInitial.mono {g : RiemannianMetric I M} {Ξ³ : ℝ β†’ M} {s s' : Set ℝ} @@ -153,6 +155,7 @@ def maximalGeodesicInterval Set ℝ := {t : ℝ | MaximalGeodesicWitness (I := I) g p v t} +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** Membership unfolding. -/ lemma mem_maximalGeodesicInterval_iff {g : RiemannianMetric I M} {p : M} {v : TangentSpace I p} @@ -161,6 +164,7 @@ lemma mem_maximalGeodesicInterval_iff MaximalGeodesicWitness (I := I) g p v t := Iff.rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** `maximalGeodesicInterval g p v` is open. The key observation: if `MaximalGeodesicWitness g p v t` holds with witness `(Ξ³, J)`, then for every `t' ∈ J` we also have `MaximalGeodesicWitness g p v t'` (with the @@ -179,6 +183,7 @@ theorem maximalGeodesicInterval_isOpen section LocalExistence +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The local geodesic produced by `exists_geodesic_with_initial_velocity_at` provides an open interval `J βˆ‹ 0` on which a geodesic with initial data `(p, v)` exists. This is the basic witness for membership of `0` in the maximal interval. -/ @@ -194,12 +199,14 @@ lemma exists_maximalGeodesicWitness_zero Β· exact (convex_ball (0 : ℝ) Ξ΅).isPreconnected exact ⟨f, fun _ => rfl, hf0, hf_on⟩ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** `0` belongs to the maximal interval. -/ theorem zero_mem_maximalGeodesicInterval (g : RiemannianMetric I M) (p : M) (v : TangentSpace I p) : (0 : ℝ) ∈ maximalGeodesicInterval (I := I) g p v := exists_maximalGeodesicWitness_zero (I := I) g p v +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The maximal interval is nonempty. -/ theorem maximalGeodesicInterval_nonempty (g : RiemannianMetric I M) (p : M) (v : TangentSpace I p) : @@ -219,6 +226,7 @@ def maximalGeodesicChosenCurve ℝ β†’ M := Classical.choose h +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in lemma maximalGeodesicChosenCurve_spec (g : RiemannianMetric I M) (p : M) (v : TangentSpace I p) {t : ℝ} (h : MaximalGeodesicWitness (I := I) g p v t) : @@ -239,6 +247,7 @@ def maximalGeodesic maximalGeodesicChosenCurve (I := I) g p v h t else p +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** Outside the maximal interval, `maximalGeodesic` takes the value `p`. -/ lemma maximalGeodesic_of_not_mem {g : RiemannianMetric I M} {p : M} {v : TangentSpace I p} @@ -248,6 +257,7 @@ lemma maximalGeodesic_of_not_mem letI : Decidable (MaximalGeodesicWitness (I := I) g p v t) := Classical.dec _ exact dif_neg ht +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** On the maximal interval, `maximalGeodesic g p v` equals the chosen local geodesic. -/ lemma maximalGeodesic_of_mem @@ -264,6 +274,7 @@ end MaximalGeodesicDefinition section MaximalGeodesicValue +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** `maximalGeodesic g p v` starts at `p`. -/ theorem maximalGeodesic_zero (g : RiemannianMetric I M) (p : M) (v : TangentSpace I p) : @@ -279,6 +290,7 @@ end MaximalGeodesicValue section MaximalGeodesicAtTime +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** The witness `Ξ³` chosen at `t ∈ maximalGeodesicInterval g p v` is a local geodesic at `t` with the prescribed initial data, provided every witness curve covering `t` keeps its foot `Ξ³ t` in the base chart-source @@ -302,6 +314,7 @@ theorem exists_isGeodesicAt_of_mem_maximalGeodesicInterval refine ⟨γ, J, hJ, h0, ht, hΞ³, ?_⟩ exact hΞ³.isGeodesicAt (hJ.mem_nhds ht) (ht_src Ξ³ J hΞ³) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [I.Boundaryless] in /-- **Math.** For every `t` in the maximal interval, there exists a geodesic witness producing `IsGeodesicAt g (witness) t` with starting point `p`, provided every witness curve keeps its foot `Ξ³ t` in the base chart-source @@ -327,6 +340,7 @@ end MaximalGeodesicAtTime section MaximalGeodesicMain +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Structural properties of the canonical maximal geodesic with initial datum `(p, v)`: writing `I_max := maximalGeodesicInterval g p v` and `Ξ³_max := maximalGeodesic g p v`, the set `I_max` is open and contains `0`, diff --git a/OpenGALib/Riemannian/Geodesic/SymmetryLemma.lean b/OpenGALib/Riemannian/Geodesic/SymmetryLemma.lean index c8ca9108..1a9a1923 100644 --- a/OpenGALib/Riemannian/Geodesic/SymmetryLemma.lean +++ b/OpenGALib/Riemannian/Geodesic/SymmetryLemma.lean @@ -18,15 +18,15 @@ open Bundle Manifold Set open scoped Manifold Topology ContDiff Matrix -- the chart machinery pulls in `Module.Finite ℝ E` which this thin lemma never names -set_option linter.unusedSectionVars false namespace Riemannian.Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Symmetry lemma (do Carmo Ch. 3, Lemma 3.4), chart-coordinate form.** For a `CΒ²` chart-coordinate surface `c : ℝ² β†’ E` with derivative `Dc` (everywhere) and second derivative `D2c` at `x`, the covariant second derivative @@ -42,6 +42,7 @@ theorem covariant_sndFDeriv_symm (g : RiemannianMetric I M) (Ξ± : M) = D2c w v + chartChristoffelContraction (I := I) g Ξ± (Dc x w) (Dc x v) (c x) := by rw [second_derivative_symmetric hc hc2 v w, chartChristoffelContraction_symm] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Symmetry lemma (do Carmo Ch. 3, Lemma 3.4), local chart-coordinate form.** The same covariant-second-derivative symmetry with the first-derivative hypothesis required only *near* `x` β€” the form needed for a surface (such as diff --git a/OpenGALib/Riemannian/Geodesic/UniformExistence.lean b/OpenGALib/Riemannian/Geodesic/UniformExistence.lean index 20590c9b..5e3e605f 100644 --- a/OpenGALib/Riemannian/Geodesic/UniformExistence.lean +++ b/OpenGALib/Riemannian/Geodesic/UniformExistence.lean @@ -1,6 +1,5 @@ import OpenGALib.Riemannian.Geodesic.ChartFlow -set_option linter.unusedSectionVars false /-! # Uniform-time existence for geodesics with small initial velocity @@ -178,11 +177,12 @@ end GenericFlow namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -variable [I.Boundaryless] [CompleteSpace E] [T2Space (TangentBundle I M)] +variable [I.Boundaryless] [T2Space (TangentBundle I M)] +omit [I.Boundaryless] [T2Space (TangentBundle I M)] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The coordinate geodesic spray vanishes at the zero section: `F(Ο†_p(p), 0) = (0, 0)`. -/ lemma geodesicSprayCoord_zero_velocity (g : RiemannianMetric I M) (p : M) (x : E) : @@ -190,6 +190,7 @@ lemma geodesicSprayCoord_zero_velocity (g : RiemannianMetric I M) (p : M) (x : E rw [geodesicSprayCoord_def, chartChristoffelContraction_zero_left] simp +omit [T2Space (TangentBundle I M)] [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The coordinate geodesic spray is `C^1` at the zero section point `(Ο†_p(p), 0)`. -/ lemma contDiffAt_geodesicSprayCoord_zero (g : RiemannianMetric I M) (p : M) : @@ -203,6 +204,7 @@ lemma contDiffAt_geodesicSprayCoord_zero (g : RiemannianMetric I M) (p : M) : exact ((contDiffOn_geodesicSprayCoord_prod (I := I) g p).contDiffAt (hopen.mem_nhds hmem)).of_le (by norm_num) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Uniform-time local geodesic flow** (the uniform-in-velocity clause of do Carmo Ch. 3, Prop. 2.7, at a fixed base point). There are `r, Ξ΅ > 0` and a local flow `Z` of the coordinate spray at `p` such that: diff --git a/OpenGALib/Riemannian/Geodesic/Uniqueness.lean b/OpenGALib/Riemannian/Geodesic/Uniqueness.lean index 8894112f..05f6ad14 100644 --- a/OpenGALib/Riemannian/Geodesic/Uniqueness.lean +++ b/OpenGALib/Riemannian/Geodesic/Uniqueness.lean @@ -2,7 +2,6 @@ import OpenGALib.Riemannian.Geodesic.Equation import OpenGALib.Riemannian.Geodesic.Existence import Mathlib.Geometry.Manifold.IntegralCurve.ExistUnique -set_option linter.unusedSectionVars false /-! # Local uniqueness of geodesics via Picard-LindelΓΆf / Gronwall @@ -49,15 +48,16 @@ namespace Riemannian namespace Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] section ChartFixedUniqueness -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Uniqueness of integral curves of the chart-fixed geodesic vector field.** Two `IsMIntegralCurveAt` witnesses `f₁, fβ‚‚` for the chart-fixed geodesic vector field `geodesicVectorFieldChart g Ξ±` at `tβ‚€` that agree @@ -94,6 +94,7 @@ theorem isMIntegralCurveAt_geodesicVectorFieldChart_eventuallyEq (Ξ³ := f₁) (Ξ³' := fβ‚‚) (tβ‚€ := tβ‚€) hsmooth1 hf₁ hfβ‚‚ h0 +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Projected uniqueness.** Under the same hypotheses, the base curves agree on a neighbourhood of `tβ‚€`. -/ theorem projectCurve_eventuallyEq_of_isMIntegralCurveAt_geodesicVectorFieldChart @@ -116,8 +117,9 @@ end ChartFixedUniqueness section GeodesicUniqueness -variable [I.Boundaryless] [CompleteSpace E] +variable [I.Boundaryless] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Uniqueness of geodesics with a fixed chart basepoint.** If two curves are local geodesics at `tβ‚€` witnessed by the same chart basepoint `Ξ± : M` and lifts `f₁, fβ‚‚` with `f₁ tβ‚€ = fβ‚‚ tβ‚€`, and the common starting @@ -144,6 +146,7 @@ theorem isGeodesicAt_eventuallyEq rw [projectCurve_apply, projectCurve_apply] at ht rw [← hproj₁ t, ← hprojβ‚‚ t]; exact ht +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Uniqueness of geodesics with matching initial data.** If the base curves `γ₁, Ξ³β‚‚` are projections of integral curves `f₁, fβ‚‚` of the chart-fixed geodesic vector field for the chart basepoint `γ₁ tβ‚€`, and the diff --git a/OpenGALib/Riemannian/Geodesic/VariationalEquation.lean b/OpenGALib/Riemannian/Geodesic/VariationalEquation.lean index 0e5f5270..06b7ad49 100644 --- a/OpenGALib/Riemannian/Geodesic/VariationalEquation.lean +++ b/OpenGALib/Riemannian/Geodesic/VariationalEquation.lean @@ -1,6 +1,5 @@ import OpenGALib.Riemannian.Geodesic.FlowDependence -set_option linter.unusedSectionVars false -- the sup-norm instance on curves valued in operators of the extended state space -- `E Γ— (E β†’L[ℝ] E)` needs nested pending instance synthesis beyond the default depth set_option maxSynthPendingDepth 3 @@ -78,6 +77,7 @@ def curveProd : C(K, E) Γ— C(K, F) β†’L[ℝ] C(K, E Γ— F) := rw [Prod.norm_def, Prod.norm_def] exact max_le_max (q.1.norm_coe_le_norm t) (q.2.norm_coe_le_norm t)) +omit [CompleteSpace E] in @[simp] lemma curveProd_apply (Ξ± : C(K, E)) (Ξ² : C(K, F)) (t : K) : curveProd (Ξ±, Ξ²) t = (Ξ± t, Ξ² t) := rfl @@ -104,9 +104,11 @@ def compRightCurve : mul_le_mul_of_nonneg_right (Ξ³.norm_coe_le_norm t) (norm_nonneg Wβ‚€) _ = β€–Wβ‚€β€– * β€–Ξ³β€– := mul_comm _ _) +omit [CompleteSpace E] in @[simp] lemma compRightCurve_apply (Wβ‚€ : E β†’L[ℝ] E) (Ξ³ : C(K, E β†’L[ℝ] E)) (t : K) : compRightCurve Wβ‚€ Ξ³ t = (Ξ³ t).comp Wβ‚€ := rfl +omit [CompleteSpace E] in /-- **Math.** Postcomposition by an operator-curve difference is the difference of the postcompositions: `postcompCurve (A - B) = postcompCurve A - postcompCurve B` (the assignment `A ↦ postcompCurve A` is linear). -/ @@ -117,6 +119,7 @@ lemma postcompCurve_sub (A B : C(K, E β†’L[ℝ] F)) : ext t simp +omit [CompleteSpace E] in /-- **Math.** Left-composition curves do not increase the sup norm: `β€–(t ↦ (A t) ∘L Β·)β€– ≀ β€–Aβ€–`, i.e. postcomposing an operator curve with the left-composition operator `compL` is bounded by the curve's own norm. -/ @@ -150,6 +153,7 @@ of `f` with the solution of the variational (linearized) equation along it. -/ def variationalField (f : E β†’ E) (f' : E β†’ E β†’L[ℝ] E) : E Γ— (E β†’L[ℝ] E) β†’ E Γ— (E β†’L[ℝ] E) := fun q => (f q.1, (f' q.1).comp q.2) +omit [CompleteSpace E] in @[simp] lemma variationalField_apply (f : E β†’ E) (f' : E β†’ E β†’L[ℝ] E) (q : E Γ— (E β†’L[ℝ] E)) : variationalField f f' q = (f q.1, (f' q.1).comp q.2) := rfl @@ -167,6 +171,7 @@ def variationalFieldDeriv (f' : E β†’ E β†’L[ℝ] E) (f'' : E β†’ E β†’L[ℝ] E + ((ContinuousLinearMap.compL ℝ E E E).flip q.2).comp ((f'' q.1).comp (ContinuousLinearMap.fst ℝ E (E β†’L[ℝ] E)))) +omit [CompleteSpace E] in /-- **Math.** The variational field is differentiable wherever `f` is twice differentiable, with derivative `variationalFieldDeriv`. -/ theorem hasFDerivAt_variationalField {f : E β†’ E} {f' : E β†’ E β†’L[ℝ] E} @@ -184,6 +189,7 @@ theorem hasFDerivAt_variationalField {f : E β†’ E} {f' : E β†’ E β†’L[ℝ] E} have h2 := hc.clm_comp (hasFDerivAt_snd (p := q)) exact h1.prodMk h2 +omit [CompleteSpace E] in /-- **Math.** The derivative of the variational field is continuous wherever `f'` and `f''` are: `q ↦ variationalFieldDeriv f' f'' q` is continuous at every `q` with `f'` and `f''` continuous at `q.1`. -/ @@ -224,6 +230,7 @@ theorem continuousAt_variationalFieldDeriv {f' : E β†’ E β†’L[ℝ] E} exact ((continuousAt_const.clm_comp hblock1).add (continuousAt_const.clm_comp (hblock2a.add hblock2b))) +omit [CompleteSpace E] in /-- **Math.** The variational field is continuous on `u Γ—Λ’ univ` when `f` is differentiable on the open set `u` (so both `f` and `f'` are continuous there). -/ theorem continuousOn_variationalField {f : E β†’ E} {f' : E β†’ E β†’L[ℝ] E} @@ -424,7 +431,6 @@ theorem flowDeriv_eq_applyCurve_opFlow simp only [hcancel] at hfin exact hfin -set_option maxHeartbeats 1600000 in /-- **Math.** **Second-order dependence of a solution family on its initial condition** (the key step of `CΒ²` dependence, do Carmo Ch. 3, Β§2 β€” the regularity behind Theorem 2.2 beyond `CΒΉ`). Let `Οƒ` be a solution family of `x' = f(x)` near `xβ‚€` (zeros of the Picard residual, @@ -538,6 +544,7 @@ theorem exists_hasStrictFDerivAt_opFlow_of_picardResidual_curve /-! ## Instantiation interface: norm bound and componentwise residual verification -/ +omit [CompleteSpace E] in /-- **Math.** Norm bound for the variational-field derivative: at `q = (z, W)` with `β€–f' zβ€– ≀ C`, `β€–f'' zβ€– ≀ Cβ‚‚` and `β€–Wβ€– ≀ B`, `β€–D(variationalField)(q)β€– ≀ C + Cβ‚‚ B` (max norm on the product). This is the estimate diff --git a/OpenGALib/Riemannian/Metric/RiemannianMetric.lean b/OpenGALib/Riemannian/Metric/RiemannianMetric.lean index bd556927..8546b0c8 100644 --- a/OpenGALib/Riemannian/Metric/RiemannianMetric.lean +++ b/OpenGALib/Riemannian/Metric/RiemannianMetric.lean @@ -132,47 +132,47 @@ theorem metricInner_smul_right (g : RiemannianMetric I M) show g.inner x V (c β€’ W) = c * g.inner x V W rw [(g.inner x V).map_smul]; rfl -@[simp, metric_simp] +@[metric_simp] theorem metricInner_zero_left (g : RiemannianMetric I M) (x : M) (W : TangentSpace I x) : g.metricInner x 0 W = 0 := by show g.inner x 0 W = 0 rw [(g.inner x).map_zero]; rfl -@[simp, metric_simp] +@[metric_simp] theorem metricInner_zero_right (g : RiemannianMetric I M) (x : M) (V : TangentSpace I x) : g.metricInner x V 0 = 0 := (g.inner x V).map_zero -@[simp, metric_simp] +@[metric_simp] theorem metricInner_neg_left (g : RiemannianMetric I M) (x : M) (V W : TangentSpace I x) : g.metricInner x (-V) W = -g.metricInner x V W := by show g.inner x (-V) W = -g.inner x V W rw [(g.inner x).map_neg]; rfl -@[simp, metric_simp] +@[metric_simp] theorem metricInner_neg_right (g : RiemannianMetric I M) (x : M) (V W : TangentSpace I x) : g.metricInner x V (-W) = -g.metricInner x V W := (g.inner x V).map_neg W -@[simp, metric_simp] +@[metric_simp] theorem metricInner_sub_left (g : RiemannianMetric I M) (x : M) (V₁ Vβ‚‚ W : TangentSpace I x) : g.metricInner x (V₁ - Vβ‚‚) W = g.metricInner x V₁ W - g.metricInner x Vβ‚‚ W := by show g.inner x (V₁ - Vβ‚‚) W = g.inner x V₁ W - g.inner x Vβ‚‚ W rw [(g.inner x).map_sub]; rfl -@[simp, metric_simp] +@[metric_simp] theorem metricInner_sub_right (g : RiemannianMetric I M) (x : M) (V W₁ Wβ‚‚ : TangentSpace I x) : g.metricInner x V (W₁ - Wβ‚‚) = g.metricInner x V W₁ - g.metricInner x V Wβ‚‚ := (g.inner x V).map_sub W₁ Wβ‚‚ /-- **Math.** $\langle V, V\rangle_g \ge 0$ for any $V$. -/ -@[simp, metric_simp] +@[metric_simp] theorem metricInner_self_nonneg (g : RiemannianMetric I M) (x : M) (V : TangentSpace I x) : 0 ≀ g.metricInner x V V := by @@ -289,7 +289,6 @@ noncomputable def metricRiesz (g : RiemannianMetric I M) (x : M) ((Ο† : TangentSpace I x β†’β‚—[ℝ] ℝ)) /-- **Math.** Defining property of Riesz: $\langle \text{metricRiesz}\,\varphi, W\rangle_g = \varphi(W)$. -/ -@[simp] theorem metricRiesz_inner (g : RiemannianMetric I M) (x : M) (Ο† : TangentSpace I x β†’L[ℝ] ℝ) (V : TangentSpace I x) : g.metricInner x (g.metricRiesz x Ο†) V = Ο† V := diff --git a/OpenGALib/Riemannian/TangentBundle/LocallyConstant.lean b/OpenGALib/Riemannian/TangentBundle/LocallyConstant.lean index 2123dd31..54e80c5f 100644 --- a/OpenGALib/Riemannian/TangentBundle/LocallyConstant.lean +++ b/OpenGALib/Riemannian/TangentBundle/LocallyConstant.lean @@ -18,6 +18,8 @@ stack (`extChartAt_self_eventually_mem_closure_interior_range`). open scoped Manifold Topology +/-- A charted space has locally constant chart selection if, near every base point, `chartAt H` +chooses the same partial homeomorphism as it does at the base point. -/ class IsLocallyConstantChartedSpace (H : Type*) [TopologicalSpace H] (M : Type*) [TopologicalSpace M] [ChartedSpace H M] : Prop where diff --git a/OpenGALib/Riemannian/TangentBundle/TangentSmooth.lean b/OpenGALib/Riemannian/TangentBundle/TangentSmooth.lean index 043db13b..93a3bc8a 100644 --- a/OpenGALib/Riemannian/TangentBundle/TangentSmooth.lean +++ b/OpenGALib/Riemannian/TangentBundle/TangentSmooth.lean @@ -211,12 +211,13 @@ namespace SmoothVectorField instance : CoeFun (SmoothVectorField I M) fun _ => Ξ  y : M, TangentSpace I y := ⟨toFun⟩ -@[simp] lemma coe_mk (f : Ξ  y : M, TangentSpace I y) (h) : +lemma coe_mk (f : Ξ  y : M, TangentSpace I y) (h) : ⇑(⟨f, h⟩ : SmoothVectorField I M) = f := rfl theorem smoothAt (X : SmoothVectorField I M) (x : M) : TangentSmoothAt X x := TangentSmoothAt.mk ((X.smooth x).mdifferentiableAt (by simp : (∞ : β„•βˆžΟ‰) β‰  0)) +/-- The smooth vector field that is zero at every point. -/ noncomputable def zero : SmoothVectorField I M where toFun := fun _ => 0 smooth := Bundle.contMDiff_zeroSection ℝ (TangentSpace I (M := M)) (n := ∞) @@ -225,6 +226,7 @@ noncomputable instance : Zero (SmoothVectorField I M) := ⟨zero⟩ @[simp] lemma zero_apply (y : M) : (0 : SmoothVectorField I M) y = 0 := rfl +/-- Pointwise addition of smooth vector fields. -/ noncomputable def add (X Y : SmoothVectorField I M) : SmoothVectorField I M where toFun := fun y => X y + Y y smooth := ContMDiff.add_section X.smooth Y.smooth @@ -234,6 +236,7 @@ noncomputable instance : Add (SmoothVectorField I M) := ⟨add⟩ @[simp] lemma add_apply (X Y : SmoothVectorField I M) (y : M) : (X + Y) y = X y + Y y := rfl +/-- Pointwise negation of a smooth vector field. -/ noncomputable def neg (X : SmoothVectorField I M) : SmoothVectorField I M where toFun := fun y => -X y smooth := ContMDiff.neg_section X.smooth @@ -243,6 +246,7 @@ noncomputable instance : Neg (SmoothVectorField I M) := ⟨neg⟩ @[simp] lemma neg_apply (X : SmoothVectorField I M) (y : M) : (-X) y = -X y := rfl +/-- Pointwise subtraction of smooth vector fields. -/ noncomputable def sub (X Y : SmoothVectorField I M) : SmoothVectorField I M where toFun := fun y => X y - Y y smooth := ContMDiff.sub_section X.smooth Y.smooth @@ -252,6 +256,7 @@ noncomputable instance : Sub (SmoothVectorField I M) := ⟨sub⟩ @[simp] lemma sub_apply (X Y : SmoothVectorField I M) (y : M) : (X - Y) y = X y - Y y := rfl +/-- Pointwise scalar multiplication of a smooth vector field by a constant real number. -/ noncomputable def constSMul (a : ℝ) (X : SmoothVectorField I M) : SmoothVectorField I M where toFun := fun y => a β€’ X y smooth := ContMDiff.const_smul_section (a := a) X.smooth @@ -302,12 +307,12 @@ to the manifold side via `comp_of_preimage_mem_nhdsWithin`. namespace Riemannian variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] - [FiniteDimensional ℝ E] [CompleteSpace E] + [FiniteDimensional ℝ E] {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] [IsLocallyConstantChartedSpace H M] -omit [FiniteDimensional ℝ E] [CompleteSpace E] in +omit [FiniteDimensional ℝ E] in /-- **Math.** Smoothness of $y \mapsto \mathrm{d}f_y(v)$ for chart-frame-constant $v$. -/ theorem mfderiv_const_dir_smoothAt {f : M β†’ ℝ} (hf : ContMDiff I π“˜(ℝ, ℝ) ∞ f) (x : M) (v : E) : @@ -384,7 +389,7 @@ theorem mfderiv_const_dir_smoothAt rw [h_written, h_extChart_eq] rfl -omit [FiniteDimensional ℝ E] [CompleteSpace E] in +omit [FiniteDimensional ℝ E] in /-- **Math.** Smoothness of $y \mapsto \mathrm{d}f_y(V(y))$ for smoothly-varying $V : M \to E$. -/ theorem mfderiv_smoothDir_smoothAt {f : M β†’ ℝ} (hf : ContMDiff I π“˜(ℝ, ℝ) ∞ f) {x : M} diff --git a/OpenGALib/Riemannian/TensorBundle/MusicalIso.lean b/OpenGALib/Riemannian/TensorBundle/MusicalIso.lean index a7725437..ea669e88 100644 --- a/OpenGALib/Riemannian/TensorBundle/MusicalIso.lean +++ b/OpenGALib/Riemannian/TensorBundle/MusicalIso.lean @@ -37,7 +37,6 @@ the `differential-geometry` external library (`Integral/Measure/ChartDensity`, noncomputable section -set_option linter.unusedSectionVars false open Bundle Manifold Set open scoped Manifold Topology ContDiff Matrix @@ -62,6 +61,7 @@ def chartGramMatrix (g : RiemannianMetric I M) (Ξ± : M) (x : M) : (chartBasisVecFiber (I := I) Ξ± i x) (chartBasisVecFiber (I := I) Ξ± j x) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma chartGramMatrix_apply (g : RiemannianMetric I M) (Ξ± : M) (x : M) (i j : Fin (Module.finrank ℝ E)) : @@ -70,6 +70,7 @@ def chartGramMatrix (g : RiemannianMetric I M) (Ξ± : M) (x : M) : (chartBasisVecFiber (I := I) Ξ± i x) (chartBasisVecFiber (I := I) Ξ± j x) := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The Gram matrix is Hermitian (symmetric, real entries). -/ lemma chartGramMatrix_isHermitian (g : RiemannianMetric I M) (Ξ± : M) (x : M) : @@ -85,6 +86,7 @@ lemma chartGramMatrix_isHermitian /-! ## Stage 2: positive-definiteness on the base set -/ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The Gram-matrix quadratic form equals the metric-inner-product squared norm of the corresponding linear combination of chart-basis vectors. -/ lemma chartGramMatrix_dotProduct_mulVec @@ -138,6 +140,7 @@ lemma chartGramMatrix_dotProduct_mulVec intro j _ ring +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The Gram matrix of the chart-basis family is positive-definite on the trivialization base set. -/ lemma chartGramMatrix_posDef @@ -159,6 +162,7 @@ lemma chartGramMatrix_posDef exact hc this exact g.pos x w hwnz +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The determinant of the Gram matrix is strictly positive on the trivialization base set. -/ lemma chartGramMatrix_det_pos @@ -169,6 +173,7 @@ lemma chartGramMatrix_det_pos /-! ## Stage 3: smoothness of Gram-matrix entries -/ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** Each Gram-matrix entry is smooth on the trivialization base set, via `ContMDiffOn.clm_bundle_applyβ‚‚` on `g.contMDiff` and two `chartBasisVec`. -/ lemma chartGramMatrix_entry_contMDiffOn @@ -200,6 +205,7 @@ lemma chartGramMatrix_entry_contMDiffOn rw [Bundle.contMDiffWithinAt_totalSpace] at hpx exact hpx.2 +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** The determinant of the Gram matrix is smooth on the trivialization base set. Expands `Matrix.det` as a finite sum of finite products and chains entry smoothness. -/ @@ -227,6 +233,7 @@ lemma chartGramMatrix_det_contMDiffOn /-! ## Stage 4: smoothness of the adjugate entries -/ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** Each adjugate entry of the Gram matrix is smooth on the trivialization base set: a polynomial in the smooth Gram-matrix entries via `Matrix.adjugate_apply` + `updateRow`. -/ @@ -286,6 +293,7 @@ def chartInvGramMatrix (g : RiemannianMetric I M) (Ξ± : M) (x : M) : Matrix (Fin (Module.finrank ℝ E)) (Fin (Module.finrank ℝ E)) ℝ := (chartGramMatrix (I := I) g Ξ± x)⁻¹ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** On the chart base set, the inverse Gram matrix is a one-sided inverse. -/ lemma chartInvGramMatrix_mul_chartGramMatrix (g : RiemannianMetric I M) (Ξ± : M) {x : M} @@ -297,6 +305,7 @@ lemma chartInvGramMatrix_mul_chartGramMatrix unfold chartInvGramMatrix exact Matrix.nonsing_inv_mul _ hdet_unit +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Symmetric form: Gram Β· inverse Gram = 1 on the base set. -/ lemma chartGramMatrix_mul_chartInvGramMatrix (g : RiemannianMetric I M) (Ξ± : M) {x : M} @@ -308,6 +317,7 @@ lemma chartGramMatrix_mul_chartInvGramMatrix unfold chartInvGramMatrix exact Matrix.mul_nonsing_inv _ hdet_unit +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** Each entry of the inverse Gram matrix is smooth on the chart base set, via the cofactor / adjugate formula. -/ lemma chartInvGramMatrix_entry_contMDiffOn @@ -365,6 +375,7 @@ the right-hand side is smooth on the base set (Gram-matrix inverse entries via Stage 5, chart-basis vectors via `SmoothOrthoFrame`, and the covector section by hypothesis), so the LHS is smooth too. -/ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in private lemma metricRiesz_chart_form_inner_e (g : RiemannianMetric I M) (Ξ± : M) {x : M} (hx : x ∈ (trivializationAt E (TangentSpace I) Ξ±).baseSet) @@ -475,6 +486,7 @@ private lemma metricRiesz_chart_form_inner_e intro i _ rw [map_smul] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Chart-coordinate form of the Riesz dual** at a base-set point $x$. -/ private theorem metricRiesz_chart_form (g : RiemannianMetric I M) (Ξ± : M) {x : M} @@ -505,6 +517,7 @@ private theorem metricRiesz_chart_form /-! ## Stage 7: chart-local smoothness and the musical-iso section primitive -/ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** **Chart-local smoothness** of the Riesz-section in chart-frame form. Given a covector field $\Phi$ whose action on each chart-basis vector $\Phi(y)(e_j(y))$ is smooth on the trivialization base set, the @@ -585,6 +598,7 @@ lemma metricRiesz_chartLocal_total_contMDiffOn exact (hcoef i).smul (contMDiffOn_const (c := (Module.finBasis ℝ E i : E))) exact hRHS_smooth.congr (fun y hy => hsnd_eq y hy) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Smoothness of the musical isomorphism section** at a base-set point. Given $\Phi$ whose chart-basis evaluations are smooth on the trivialization base set, $y \mapsto \sharp_g\,\Phi(y)$ is smooth. @@ -623,6 +637,7 @@ theorem metricRiesz_section_contMDiffAt (trivializationAt E (TangentSpace I) Ξ±).open_baseSet exact (hMR x hx).contMDiffAt (hopen.mem_nhds hx) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** Per-point variant of `metricRiesz_section_contMDiffAt`. Math: same conclusion (Riesz section smooth at $x$). Eng: input hypothesis relaxed to `ContMDiffWithinAt baseSet x` per chart-basis index, easier diff --git a/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame.lean b/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame.lean index 3887400d..b1118372 100644 --- a/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame.lean +++ b/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame.lean @@ -43,7 +43,6 @@ follows an external `differential-geometry` lib analog. noncomputable section -set_option linter.unusedSectionVars false open Bundle Manifold Set FiberBundle Filter open scoped Manifold Topology ContDiff Bundle @@ -94,12 +93,14 @@ bump function equals $1$. -/ noncomputable def smoothOrthoFrameNbhd (Ξ± : M) : Set M := {b : M | (chartBumpAt (I := I) (M := M) Ξ± : M β†’ ℝ) b = 1} +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in /-- **Math.** The neighbourhood `smoothOrthoFrameNbhd Ξ±` is in `𝓝 Ξ±`. -/ lemma smoothOrthoFrameNbhd_mem_nhds (Ξ± : M) : smoothOrthoFrameNbhd (I := I) (M := M) Ξ± ∈ 𝓝 Ξ± := by classical exact (chartBumpAt (I := I) (M := M) Ξ±).eventuallyEq_one +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in /-- **Math.** The centre $\alpha$ belongs to `smoothOrthoFrameNbhd Ξ±`. -/ lemma mem_smoothOrthoFrameNbhd_self (Ξ± : M) : Ξ± ∈ smoothOrthoFrameNbhd (I := I) (M := M) Ξ± := by @@ -107,6 +108,7 @@ lemma mem_smoothOrthoFrameNbhd_self (Ξ± : M) : change (chartBumpAt (I := I) (M := M) Ξ± : M β†’ ℝ) Ξ± = 1 exact (chartBumpAt (I := I) (M := M) Ξ±).eq_one +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** On `smoothOrthoFrameNbhd Ξ±`, the smooth orthonormal frame agrees with the un-bumped Gram-Schmidt step. -/ lemma smoothOrthoFrame_eq_on_nbhd @@ -120,6 +122,7 @@ lemma smoothOrthoFrame_eq_on_nbhd have hb1 : (chartBumpAt (I := I) (M := M) Ξ± : M β†’ ℝ) b = 1 := hb rw [hb1, one_smul] +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] [IsManifold I ∞ M] in /-- **Eng.** `smoothOrthoFrameNbhd Ξ±` is contained in the chart source `(chartAt H Ξ±).source`. -/ lemma smoothOrthoFrameNbhd_subset_chartAt_source (Ξ± : M) : @@ -132,6 +135,7 @@ lemma smoothOrthoFrameNbhd_subset_chartAt_source (Ξ± : M) : rw [hb1]; exact one_ne_zero exact (chartBumpAt (I := I) (M := M) Ξ±).support_subset_source hsupp +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** `smoothOrthoFrameNbhd Ξ±` is contained in the trivialization base set `(trivializationAt E (TangentSpace I) Ξ±).baseSet`. -/ @@ -151,6 +155,7 @@ yields orthonormality of `smoothOrthoFrame g Ξ±` on `smoothOrthoFrameNbhd Ξ±`, and (via $\alpha \in \mathrm{Nbhd}\,\alpha$) at the centre $\alpha$ itself. -/ +omit [InnerProductSpace ℝ E] in /-- **Math.** **Orthonormality of `smoothOrthoFrame` on the bump-equals-1 neighbourhood.** For $b \in \mathrm{smoothOrthoFrameNbhd}\,\alpha$, the smooth orthonormal frame at $b$ is $g$-orthonormal. -/ @@ -167,6 +172,7 @@ theorem smoothOrthoFrame_orthonormal exact chartFrameNorm_orthonormal (I := I) g Ξ± (smoothOrthoFrameNbhd_subset_baseSet (I := I) (M := M) Ξ± hb) i j +omit [InnerProductSpace ℝ E] in /-- **Math.** **Orthonormality of `smoothOrthoFrame` at the centre.** The frame `smoothOrthoFrame g Ξ±` is $g_\alpha$-orthonormal. Direct corollary of `smoothOrthoFrame_orthonormal` at $\alpha$, since @@ -207,6 +213,7 @@ variable [hm : HasMetric I M] open scoped InnerProductSpace +omit [InnerProductSpace ℝ E] in /-- **Math.** Orthonormality of `smoothOrthoFrame hm.metric Ξ± Β· Ξ±` in the `InnerProductSpace ℝ` sense (via `βŸͺΒ·, ·⟫_ℝ` rather than `hm.metric.inner Ξ±`). Direct from @@ -223,6 +230,7 @@ theorem smoothOrthoFrame_inner_at_center (Ξ± : M) show hm.metric.inner Ξ± _ _ = _ exact smoothOrthoFrame_orthonormal_at_center (I := I) hm.metric Ξ± i j +omit [InnerProductSpace ℝ E] in /-- **Math.** `smoothOrthoFrame hm.metric Ξ± Β· Ξ±` is an `Orthonormal` family in `TangentSpace I Ξ±`. -/ theorem smoothOrthoFrame_orthonormal_family (Ξ± : M) : @@ -253,6 +261,7 @@ noncomputable def smoothOrthoFrameOrthonormalBasis (Ξ± : M) : rw [coe_basisOfOrthonormalOfCardEqFinrank] exact hOrth +omit [InnerProductSpace ℝ E] in @[simp] theorem smoothOrthoFrameOrthonormalBasis_apply (Ξ± : M) (i : Fin (Module.finrank ℝ E)) : smoothOrthoFrameOrthonormalBasis (I := I) Ξ± i = @@ -263,6 +272,7 @@ noncomputable def smoothOrthoFrameOrthonormalBasis (Ξ± : M) : (coe_basisOfOrthonormalOfCardEqFinrank (smoothOrthoFrame_orthonormal_family (I := I) Ξ±) _) i +omit [InnerProductSpace ℝ E] in /-- **Math.** **Basis-change bridge at $\alpha$**: for any bilinear $B : T_\alpha M \to_\ell T_\alpha M \to_\ell W$ and any `OrthonormalBasis b` of `TangentSpace I Ξ±`, the diagonal sum over @@ -287,6 +297,7 @@ theorem sum_diagonal_smoothOrthoFrame_eq_orthonormalBasis simp only [smoothOrthoFrameOrthonormalBasis_apply] at h exact h +omit [InnerProductSpace ℝ E] in /-- **Math.** **Basis-change bridge to `stdOrthonormalBasis`**: specialization of `sum_diagonal_smoothOrthoFrame_eq_orthonormalBasis` with $b = \mathrm{stdOrthonormalBasis}\,\mathbb{R}\,(T_\alpha M)$ β€” the @@ -309,6 +320,7 @@ At any `b ∈ smoothOrthoFrameNbhd Ξ±`, the frame `(smoothOrthoFrame hm.metric forms a `g_b`-orthonormal basis of `T_bM`. Same construction as `smoothOrthoFrameOrthonormalBasis Ξ±` but parameterised by the nbhd point. -/ +omit [InnerProductSpace ℝ E] in /-- **Math.** `InnerProductSpace` form of `smoothOrthoFrame_orthonormal` at `b ∈ nbhd Ξ±`, routed through `HasMetric I M` β†’ `InnerProductSpace ℝ (TangentSpace I b)`. -/ theorem smoothOrthoFrame_inner_at_nbhd (Ξ± : M) {b : M} @@ -320,6 +332,7 @@ theorem smoothOrthoFrame_inner_at_nbhd (Ξ± : M) {b : M} show hm.metric.inner b _ _ = _ exact smoothOrthoFrame_orthonormal (I := I) hm.metric Ξ± hb i j +omit [InnerProductSpace ℝ E] in /-- **Math.** `smoothOrthoFrame hm.metric Ξ± Β· b` is an `Orthonormal` family in `T_bM`. -/ theorem smoothOrthoFrame_orthonormal_family_at_nbhd (Ξ± : M) {b : M} (hb : b ∈ smoothOrthoFrameNbhd (I := I) (M := M) Ξ±) : @@ -344,6 +357,7 @@ noncomputable def smoothOrthoFrameOrthonormalBasis_at_nbhd (Ξ± : M) {b : M} rw [coe_basisOfOrthonormalOfCardEqFinrank] exact hOrth +omit [InnerProductSpace ℝ E] in @[simp] theorem smoothOrthoFrameOrthonormalBasis_at_nbhd_apply (Ξ± : M) {b : M} (hb : b ∈ smoothOrthoFrameNbhd (I := I) (M := M) Ξ±) (i : Fin (Module.finrank ℝ E)) : @@ -355,6 +369,7 @@ noncomputable def smoothOrthoFrameOrthonormalBasis_at_nbhd (Ξ± : M) {b : M} (coe_basisOfOrthonormalOfCardEqFinrank (smoothOrthoFrame_orthonormal_family_at_nbhd (I := I) Ξ± hb) _) i +omit [InnerProductSpace ℝ E] in /-- **Math.** **Basis-change bridge at `b ∈ nbhd Ξ±` (to `stdOrthonormalBasis`)**: the diagonal sum over the smooth orthonormal frame at any nbhd point `b` equals the diagonal sum over `stdOrthonormalBasis ℝ (T_bM)`. Parametric diff --git a/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame/ChartBasis.lean b/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame/ChartBasis.lean index 82a745cc..9c16d08b 100644 --- a/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame/ChartBasis.lean +++ b/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame/ChartBasis.lean @@ -30,7 +30,6 @@ chain lives in `Tensor/SmoothOrthoFrame/Smoothness.lean`. Anchor noncomputable section -set_option linter.unusedSectionVars false open Bundle Manifold Set FiberBundle Filter open scoped Manifold Topology ContDiff Bundle @@ -60,14 +59,17 @@ def chartBasisVec (Ξ± : M) (i : Fin (Module.finrank ℝ E)) : M β†’ TotalSpace E (TangentSpace I : M β†’ Type _) := fun b => TotalSpace.mk' E b (chartBasisVecFiber (I := I) Ξ± i b) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma chartBasisVec_proj (Ξ± : M) (i : Fin (Module.finrank ℝ E)) (b : M) : (chartBasisVec (I := I) Ξ± i b).proj = b := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in @[simp] lemma chartBasisVec_snd (Ξ± : M) (i : Fin (Module.finrank ℝ E)) (b : M) : (chartBasisVec (I := I) Ξ± i b).2 = chartBasisVecFiber (I := I) Ξ± i b := rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** On the base set, the trivialization sends the chart-basis vector to the constant model-basis vector. -/ lemma trivializationAt_chartBasisVec_snd @@ -80,6 +82,7 @@ lemma trivializationAt_chartBasisVec_snd ((Module.finBasis ℝ E) i) simpa [chartBasisVecFiber] using congrArg Prod.snd h +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart-basis tangent-bundle section is smooth on the base set of the trivialization at $\alpha$. -/ lemma chartBasisVec_contMDiffOn @@ -108,6 +111,7 @@ def chartBasisFamily (Ξ± : M) {b : M} (ContinuousLinearEquiv.toLinearEquiv ((trivializationAt E (TangentSpace I) Ξ±).continuousLinearEquivAt ℝ b hb).symm) +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in lemma chartBasisFamily_apply (Ξ± : M) {b : M} (hb : b ∈ (trivializationAt E (TangentSpace I) Ξ±).baseSet) (i : Fin (Module.finrank ℝ E)) : @@ -117,6 +121,7 @@ lemma chartBasisFamily_apply (Ξ± : M) {b : M} rw [Module.Basis.map_apply] rfl +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** The chart-basis family is linearly independent at each base-set point. -/ lemma chartBasisFamily_linearIndependent (Ξ± : M) {b : M} @@ -183,6 +188,7 @@ noncomputable def chartFrameRawFiber chartFrameNormFiber (I := I) g Ξ± b ⟨j.val, lt_trans j.isLt i.isLt⟩ +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** Recursive expansion of `chartFrameNormFiber` at index $i$. normalised vector is `(Real.sqrt (g.inner b raw raw))⁻¹ β€’ raw`. -/ lemma chartFrameNormFiber_eq @@ -196,6 +202,7 @@ lemma chartFrameNormFiber_eq unfold chartFrameNormFiber chartFrameRawFiber rfl +omit [InnerProductSpace ℝ E] in /-- **Eng.** At the zeroth index, the unnormalised Gram-Schmidt vector reduces to the chart-basis vector itself (the empty sum vanishes). -/ lemma chartFrameRawFiber_at_zero @@ -205,6 +212,7 @@ lemma chartFrameRawFiber_at_zero unfold chartFrameRawFiber simp +omit [InnerProductSpace ℝ E] in /-- **Eng.** At the zeroth index, the normalised Gram-Schmidt vector is the chart-basis vector divided by its $g$-norm. -/ lemma chartFrameNormFiber_at_zero @@ -217,6 +225,7 @@ lemma chartFrameNormFiber_at_zero chartBasisVecFiber (I := I) Ξ± ⟨0, NeZero.pos _⟩ b := by rw [chartFrameNormFiber_eq, chartFrameRawFiber_at_zero] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** Generic normalisation calculation: for a vector $v$ in a fiber with positive $g$-self-inner-product $N$, scaling $v$ by $(\sqrt N)^{-1}$ gives a unit-norm vector. Pure continuous linear map/ring algebra in @@ -246,6 +255,7 @@ lemma g_inner_normalised _ = (g.inner b v v)⁻¹ * g.inner b v v := by rw [hs_sq] _ = 1 := inv_mul_cancelβ‚€ hpos.ne' +omit [InnerProductSpace ℝ E] in /-- **Math.** At a base-set point and at the zeroth index, the normalised Gram-Schmidt vector is $g$-unit-norm. -/ lemma chartFrameNormFiber_at_zero_norm diff --git a/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame/Orthonormality.lean b/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame/Orthonormality.lean index 9074e69b..4a8e624e 100644 --- a/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame/Orthonormality.lean +++ b/OpenGALib/Riemannian/TensorBundle/SmoothOrthoFrame/Orthonormality.lean @@ -25,7 +25,6 @@ API and `OrthonormalBasis` packaging live in the anchor noncomputable section -set_option linter.unusedSectionVars false open Bundle Manifold Set FiberBundle Filter open scoped Manifold Topology ContDiff Bundle @@ -52,6 +51,7 @@ of the chart-basis family (`chartBasisFamily_linearIndependent`) and the inductive span identity $e_0, \ldots, e_{i-1} \in \mathrm{span}(v_0, \ldots, v_{i-1})$. -/ +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** Bilinear distribution of `g.inner b u (Β·)` over a finite sum. -/ private lemma g_inner_sum_right (g : RiemannianMetric I M) (b : M) (v : TangentSpace I b) @@ -70,6 +70,7 @@ private lemma g_inner_sum_right rw [map_smul]; rfl] rw [ih] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** Bilinear distribution of `g.inner b (Β·) w` over a finite sum. -/ private lemma g_inner_sum_left (g : RiemannianMetric I M) (b : M) @@ -89,6 +90,7 @@ private lemma g_inner_sum_left rw [map_smul]; rfl] rw [ih] +omit [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Eng.** Generic normalisation: scaling a positive-norm vector by $(\sqrt{\langle v, v\rangle})^{-1}$ in the **second** slot equals the analogous left-slot scaling, factored through the same helper. Used @@ -99,6 +101,7 @@ private lemma g_inner_smul_right_normalised g.inner b u (s⁻¹ β€’ v) = s⁻¹ * g.inner b u v := by rw [map_smul]; rfl +omit [InnerProductSpace ℝ E] in /-- **Math.** **Span identity** (recursion-structural): for every $m$ with $m.\mathrm{val} < i.\mathrm{val}$, the normalised Gram-Schmidt vector $e_m(b) = \mathrm{chartFrameNormFiber}\,g\,\alpha\,b\,m$ lies in the @@ -149,6 +152,7 @@ private lemma chartFrameNormFiber_mem_span_chartBasis lt_trans hj_in_fin i.isLt exact ih_kk ⟨j.val, hj_lt_total⟩ hj_le_kk hj_in_fin +omit [InnerProductSpace ℝ E] in /-- **Math.** **Non-degeneracy of the unnormalised Gram-Schmidt step**: at any base-set point, $\mathrm{raw}_i \ne 0$. @@ -217,6 +221,7 @@ lemma chartFrameRawFiber_ne_zero simp [Set.mem_setOf_eq] exact hLI.notMem_span_image hi_notin hvi_in_span +omit [InnerProductSpace ℝ E] [NeZero (Module.finrank ℝ E)] in /-- **Math.** **Orthogonality of `raw_i` to each previous `e_j`**, given that $\{e_0, \ldots, e_{i-1}\}$ is already $g$-orthonormal at $b$. @@ -295,6 +300,7 @@ private lemma chartFrameRawFiber_orth_to_orthonormal_prefix rw [hej_eq] rw [hc_eq, g.symm]; ring +omit [InnerProductSpace ℝ E] in /-- **Eng.** The strong-induction package for the orthonormality of `chartFrameNormFiber`. The conclusion bundles three facts at every $i \le k$: @@ -397,6 +403,7 @@ private theorem chartFrameNormFiber_orth_strong_aux exact g_inner_normalised (I := I) g b (chartFrameRawFiber (I := I) g Ξ± b i) hgpos +omit [InnerProductSpace ℝ E] in /-- **Math.** **Inductive orthonormality** of `chartFrameNormFiber` on the trivialization base set. For $b \in \mathrm{baseSet}$ and indices $i, j$, the inner product @@ -425,6 +432,7 @@ theorem chartFrameNormFiber_orthonormal rw [if_neg hne, g.symm] exact horth_ji +omit [InnerProductSpace ℝ E] in /-- **Math.** **Orthonormality** of `chartFrameNorm` (the section form) on the trivialization base set. -/ theorem chartFrameNorm_orthonormal diff --git a/OpenGALib/Riemannian/Util/Chart/FlatChartDerivs.lean b/OpenGALib/Riemannian/Util/Chart/FlatChartDerivs.lean index b7ac6058..17ec1fc9 100644 --- a/OpenGALib/Riemannian/Util/Chart/FlatChartDerivs.lean +++ b/OpenGALib/Riemannian/Util/Chart/FlatChartDerivs.lean @@ -237,7 +237,7 @@ private theorem contMDiffOn_continuousLinearMapAtFlat private theorem contMDiffOn_mfderivWithinFlat {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] - [FiniteDimensional ℝ E] [CompleteSpace E] + [FiniteDimensional ℝ E] {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] [IsLocallyConstantChartedSpace H M] @@ -310,7 +310,7 @@ private theorem contMDiffOn_mfderivWithinFlat private theorem mfderivWithinFlat_mdifferentiableWithinAt {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] - [FiniteDimensional ℝ E] [CompleteSpace E] + [FiniteDimensional ℝ E] {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] [IsLocallyConstantChartedSpace H M] @@ -344,7 +344,7 @@ private theorem symmLFlat_eventuallyEq_mfderivWithinFlat `TangentSpace I y = E` def-eq is hidden inside the definition. -/ theorem symmLFlat_mdifferentiableAt {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] - [FiniteDimensional ℝ E] [CompleteSpace E] + [FiniteDimensional ℝ E] {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [IsManifold I ∞ M] [IsLocallyConstantChartedSpace H M] From 8673e673473f787749af3d32bc0d2c6f86fc9876 Mon Sep 17 00:00:00 2001 From: Spring-1211 Date: Fri, 17 Jul 2026 18:05:10 +0800 Subject: [PATCH 3/4] Refine the Hopf-Rinow facade --- OpenGALib/Riemannian/Geodesic/HopfRinow.lean | 48 ++++++++++---------- README.md | 37 +++++++++++---- 2 files changed, 52 insertions(+), 33 deletions(-) diff --git a/OpenGALib/Riemannian/Geodesic/HopfRinow.lean b/OpenGALib/Riemannian/Geodesic/HopfRinow.lean index f5ea563c..0c1184fe 100644 --- a/OpenGALib/Riemannian/Geodesic/HopfRinow.lean +++ b/OpenGALib/Riemannian/Geodesic/HopfRinow.lean @@ -40,7 +40,7 @@ e.g., the round circle, and is *not* geodesic completeness (see across chart changes is deferred). Status of the circle: -* b) ⟺ e) is `OpenGA.properSpace_iff_exists_compact_exhaustion` (proved); +* b) ↔ e) is `OpenGA.properSpace_iff_exists_compact_exhaustion` (proved); * b) ⟹ c) is mathlib's `ProperSpace β†’ CompleteSpace` instance (`complete_of_proper`); * c) ⟹ d) is `isGeodesicallyComplete_of_complete` β€” geodesics have constant @@ -63,7 +63,6 @@ Status of the circle: (`Exponential/ProperAssembly.lean`, `completeSpace_of_forall_geodesic`). -/ -set_option linter.unusedSectionVars false open Bundle Manifold Set open scoped Manifold Topology ContDiff @@ -72,29 +71,29 @@ open Riemannian.Exponential namespace Riemannian.Geodesic variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [InnerProductSpace ℝ E] - [Module.Finite ℝ E] [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] [CompleteSpace E] + [FiniteDimensional ℝ E] [NeZero (Module.finrank ℝ E)] {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [I.Boundaryless] {M : Type*} [MetricSpace M] [ChartedSpace H M] [IsManifold I ∞ M] -/-- **Math.** `(M, g)` is **geodesically complete**: for every `p ∈ M` and -every `v ∈ T_pM` there is a *continuous* curve `Ξ³ : ℝ β†’ M`, defined for *all* -values of the parameter, which starts at `p` with velocity `v` (chart reading -at `p`) and satisfies the geodesic equation at every time (do Carmo Ch. 7, -Definition 2.2: "`exp_p` is defined on all of `T_pM` for every `p`"). By -uniqueness of geodesics this is equivalent to every geodesic extending to all -of `ℝ`. The geodesic equation is the intrinsic, moving-chart predicate -`HasGeodesicEquationAt` (do Carmo Ch. 3, Definition 2.1), not the -chart-of-`p`-anchored witness notion. Continuity of `Ξ³` is demanded -explicitly: `HasGeodesicEquationAt` reads `Ξ³` through the junk-extended -charts, so it does not by itself rule out pathological discontinuous -witnesses, while every honestly constructed geodesic (in particular the -witness produced by `exists_global_geodesic` in the c ⟹ d direction) is -continuous. -/ -def IsGeodesicallyComplete (g : RiemannianMetric I M) : Prop := - βˆ€ (p : M) (v : TangentSpace I p), βˆƒ Ξ³ : ℝ β†’ M, +/-- **Math.** `(M, g)` is **geodesically complete at `p`** if every +`v ∈ T_pM` is the initial velocity of a continuous geodesic `Ξ³ : ℝ β†’ M` +defined for every real time. The geodesic equation is the intrinsic, +moving-chart predicate `HasGeodesicEquationAt`; continuity is required +explicitly because that predicate reads the curve through junk-extended +charts. -/ +def IsGeodesicallyCompleteAt (g : RiemannianMetric I M) (p : M) : Prop := + βˆ€ v : TangentSpace I p, βˆƒ Ξ³ : ℝ β†’ M, Ξ³ 0 = p ∧ HasDerivAt (fun s ↦ extChartAt I p (Ξ³ s)) v 0 ∧ Continuous Ξ³ ∧ IsGeodesic g Ξ³ +/-- **Math.** `(M, g)` is **geodesically complete** if it is geodesically +complete at every `p : M` (do Carmo Ch. 7, Definition 2.2: `exp_p` is defined +on all of `T_pM` for every `p`). By uniqueness, this is equivalent to every +geodesic extending to all of `ℝ`. -/ +def IsGeodesicallyComplete (g : RiemannianMetric I M) : Prop := + βˆ€ p : M, IsGeodesicallyCompleteAt g p + +omit [InnerProductSpace ℝ E] in /-- **Math.** do Carmo Ch. 7, Theorem 2.8, c) ⟹ d): if `M` is complete as a metric space (for the Riemannian distance of `g`), then `(M, g)` is geodesically complete. A geodesic has constant speed, hence is Lipschitz; if @@ -110,6 +109,7 @@ theorem isGeodesicallyComplete_of_complete (g : RiemannianMetric I M) obtain ⟨γ, h0, hv, hcont, hgeo⟩ := exists_global_geodesic (I := I) g hg p v exact ⟨γ, h0, hv, hcont, hgeo⟩ +omit [InnerProductSpace ℝ E] in /-- **Math.** do Carmo Ch. 7, Theorem 2.8, d) ⟹ c) (via f) and b)): if `(M, g)` is geodesically complete and `M` is connected, then `M` is complete as a metric space. Do Carmo's route, at any base point `p`: the growth @@ -127,8 +127,9 @@ theorem complete_of_isGeodesicallyComplete (g : RiemannianMetric I M) [Connected tendsto_geodesic_eval_of_tendsto_initialData (I := I) g p hΞ³geo hΞ³c hΞ³0 hgeo hc h0 hΞ³v hv hvs hts +omit [InnerProductSpace ℝ E] in /-- **Math.** **Hopf–Rinow theorem** (do Carmo Ch. 7, Theorem 2.8, -c) ⟺ d)). A connected Riemannian manifold, metrized by the Riemannian +c) ↔ d)). A connected Riemannian manifold, metrized by the Riemannian distance of `g`, is metrically complete iff it is geodesically complete. -/ theorem hopfRinow (g : RiemannianMetric I M) [ConnectedSpace M] (hg : g.IsRiemannianDist) : @@ -136,6 +137,7 @@ theorem hopfRinow (g : RiemannianMetric I M) [ConnectedSpace M] ⟨fun _ ↦ isGeodesicallyComplete_of_complete g hg, fun h ↦ complete_of_isGeodesicallyComplete g hg h⟩ +omit [InnerProductSpace ℝ E] in /-- **Math.** do Carmo Ch. 7, Theorem 2.8, a) ⟹ c): if `exp_p` is defined on all of `T_pM` at a single point `p`, then `M` is metrically complete. The geodesic-sphere argument runs from the single point `p`: growth induction @@ -146,15 +148,14 @@ so `M` is proper, hence complete β€” the assembly is `Riemannian.Exponential.completeSpace_of_forall_geodesic`. -/ theorem complete_of_geodesicallyComplete_at (g : RiemannianMetric I M) [ConnectedSpace M] (hg : g.IsRiemannianDist) - (p : M) (hp : βˆ€ v : TangentSpace I p, βˆƒ Ξ³ : ℝ β†’ M, - Ξ³ 0 = p ∧ HasDerivAt (fun s ↦ extChartAt I p (Ξ³ s)) v 0 ∧ Continuous Ξ³ ∧ - IsGeodesic g Ξ³) : + (p : M) (hp : IsGeodesicallyCompleteAt g p) : CompleteSpace M := completeSpace_of_forall_geodesic (I := I) g hg p hp fun _Ξ³ _Ξ³s _v _vs _ts _tβ‚€ hΞ³geo hΞ³c hΞ³0 hgeo hc h0 hΞ³v hv hvs hts => tendsto_geodesic_eval_of_tendsto_initialData (I := I) g p hΞ³geo hΞ³c hΞ³0 hgeo hc h0 hΞ³v hv hvs hts +omit [InnerProductSpace ℝ E] in /-- **Math.** do Carmo Ch. 7, Theorem 2.8, f): in a complete connected Riemannian manifold any two points `x, y` are joined by a **minimizing geodesic segment**: a geodesic `Ξ³ : [0, 1] β†’ M` from `x` to `y`, parametrized @@ -180,6 +181,7 @@ theorem exists_minimizing_geodesic (g : RiemannianMetric I M) [ConnectedSpace M] g hg x hp y exact ⟨γ, h0, h1, hgeo.isGeodesicOn _, hdist⟩ +omit [InnerProductSpace ℝ E] in /-- **Math.** do Carmo Ch. 7, Corollary 2.9: a compact Riemannian manifold is (geodesically) complete. -/ theorem isGeodesicallyComplete_of_compactSpace (g : RiemannianMetric I M) diff --git a/README.md b/README.md index 249738bc..8533c01c 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,20 @@ lake build # builds OpenGALib Requires Mathlib at the revision pinned in `lake-manifest.json` (`leanprover-community/mathlib4 @ 5fc0241932dd6d465bc5549308cc39011772293a`). +## Quality checks + +Run the same build, test, declaration-lint, and text-style checks used by CI: + +```bash +lake build +lake test +lake lint +lake exe lint-style OpenGALib +``` + +`OpenGALibTest/Axioms.lean` guards the axiom sets of the five Hopf--Rinow facade theorems. Each +test fails if its theorem acquires an axiom beyond `propext`, `Classical.choice`, and `Quot.sound`. + ## Build the blueprint PDF ```bash @@ -57,18 +71,21 @@ defined as no-ops in `main.tex`, so no leanblueprint toolchain is needed. axiom-clean (each theorem depends only on `propext`, `Classical.choice`, `Quot.sound`; verified with `#print axioms`, not just a green build): -| Theorem (do Carmo Ch. 7) | Statement | +| Declaration (do Carmo Ch. 7) | Statement | | ------------------------------------------------------- | --------- | -| `hopfRinow` | `CompleteSpace M ↔ IsGeodesicallyComplete g` (the **c ⟺ d** equivalence) | +| `IsGeodesicallyCompleteAt g p` | every initial velocity at `p` has a global geodesic | +| `isGeodesicallyComplete_of_complete` | metrically complete ⟹ geodesically complete (**c ⟹ d**) | | `complete_of_isGeodesicallyComplete` | geodesically complete ⟹ metrically complete (**d ⟹ c**) | -| `complete_of_geodesicallyComplete_at` | `exp_p` total at one point ⟹ complete (**a ⟹ c**) | -| `exists_minimizing_geodesic` | any two points joined by a minimizing geodesic (**f**) | -| `isGeodesicallyComplete_of_compactSpace` | compact ⟹ complete (**Cor. 2.9**) | - -All under the standing hypotheses `ConnectedSpace M` and `g.IsRiemannianDist` -(the metric-space structure is the Riemannian distance of `g`). Blueprint nodes -carry `\lean{…}` / `\leanok` markers recording their correspondence with the -Lean side. +| `hopfRinow` | `CompleteSpace M ↔ IsGeodesicallyComplete g` (the **c ⟺ d** equivalence) | +| `complete_of_geodesicallyComplete_at` | geodesically complete at one point ⟹ complete (**a ⟹ c**) | +| `exists_minimizing_geodesic` | any two points are joined by a minimizing geodesic (**f**) | +| `isGeodesicallyComplete_of_compactSpace` | compact ⟹ geodesically complete (**Cor. 2.9**) | + +Every result assumes `g.IsRiemannianDist` (the metric-space structure is the Riemannian +distance of `g`). Connectedness is additionally required for the reverse implication, +the equivalence, the one-point criterion, and the minimizing-geodesic theorem; it is not +needed for the forward implication or the compact-space corollary. Blueprint nodes carry +`\lean{…}` / `\leanok` markers recording their correspondence with the Lean side. ## License From a240860ea6a18c87b6fa52509a900267261ea221 Mon Sep 17 00:00:00 2001 From: Spring-1211 Date: Fri, 17 Jul 2026 18:15:20 +0800 Subject: [PATCH 4/4] Update the checkout action --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 25be8cd5..2e932fa9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: leanprover/lean-action@v1 with: build: true