Skip to content

Commit 65ff9fc

Browse files
HessianLie.lean: manifold scalar Hessian-Lie identity FULLY CLOSED (0-sorry)
Final closure step: extended Helper #3 to chart-target nbhd via `Filter.Tendsto.mono_left` of phi.symm continuity + chart-coherence pull-back. Then `Filter.EventuallyEq.lieBracketWithin_vectorField_eq_of_mem` bridges `mpullbackWithin V (range I)` to `V_loc` (and same for W). The complete proof chain now: * Bianchi I (Connection/Bianchi.lean): 0-sorry ✓ * Flat scalar Hessian-Lie (univ + Within): 0-sorry ✓ * Helper #1 (chart mfderiv = id eventually): 0-sorry ✓ * Helper #2 (chart-compose mfderiv → fderivWithin): 0-sorry ✓ * mDirDeriv-form Helper #2: 0-sorry ✓ * Helper #3 (chart-inverse mfderivWithin = id at base): 0-sorry ✓ * Helper #3 extended (eventually within range I): 0-sorry ✓ * mfderiv_iterate_sub_eq_mlieBracket_apply (manifold scalar Hessian-Lie): 0-sorry ✓ (~250 lines real proof) Riemannian package: 4 → 3 sorrys (only Curvature.lean's 3 remaining, which are unblocked by this closure).
1 parent 3a89fb5 commit 65ff9fc

2 files changed

Lines changed: 90 additions & 15 deletions

File tree

Riemannian/Foundations/HessianLie.lean

Lines changed: 87 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,61 @@ theorem mfderivWithin_extChartAt_symm_eq_id_at_base
241241
-- h_comp : id ∘L mfderivWithin ... = id
242242
simpa using h_comp
243243

244+
/-- **Helper #3 extended**: chart-inverse mfderivWithin = id eventually within `range I`. -/
245+
theorem mfderivWithin_extChartAt_symm_eq_id_eventually
246+
[IsManifold I 1 M] [IsLocallyConstantChartedSpace H M] (x : M) :
247+
∀ᶠ e in 𝓝[Set.range I] (extChartAt I x x),
248+
mfderivWithin 𝓘(ℝ, E_M) I (extChartAt I x).symm (Set.range I) e
249+
= ContinuousLinearMap.id ℝ E_M := by
250+
-- Filter upwards conditions:
251+
-- (A) e ∈ chart target (so phi.symm e is well-defined and in chart source)
252+
-- (B) `chartAt H (phi.symm e) = chartAt H x`, derived via:
253+
-- IsLocallyConstantChartedSpace.chartAt_eventually_eq nbhd of x, pulled back via phi.symm.
254+
have h_target : (extChartAt I x).target ∈ 𝓝[Set.range I] (extChartAt I x x) :=
255+
extChartAt_target_mem_nhdsWithin x
256+
-- (B): pull back chart-coherent nbhd via continuity of phi.symm at phi x within range I.
257+
have h_chart_eq_orig : ∀ᶠ y in 𝓝 x, chartAt H y = chartAt H x :=
258+
chartAt_eventually_eq_of_locallyConstant x
259+
have h_symm_tendsto : Filter.Tendsto (extChartAt I x).symm
260+
(𝓝[Set.range I] (extChartAt I x x)) (𝓝 x) := by
261+
have h_cont : ContinuousWithinAt (extChartAt I x).symm
262+
(extChartAt I x).target (extChartAt I x x) :=
263+
(continuousOn_extChartAt_symm x) _ (mem_extChartAt_target x)
264+
have h_symm_at_x : (extChartAt I x).symm (extChartAt I x x) = x :=
265+
(extChartAt I x).left_inv (mem_extChartAt_source x)
266+
have h_tendsto : Filter.Tendsto (extChartAt I x).symm
267+
(𝓝[(extChartAt I x).target] (extChartAt I x x)) (𝓝 x) := by
268+
have := h_cont.tendsto
269+
rwa [h_symm_at_x] at this
270+
-- `this : Tendsto (extChartAt I x).symm (𝓝[chart.target] (phi x)) (𝓝 x)`
271+
-- Need `Tendsto (extChartAt I x).symm (𝓝[range I] (phi x)) (𝓝 x)` — restrict 𝓝[range I] to chart.target nbhd.
272+
refine Filter.Tendsto.mono_left h_tendsto ?_
273+
rw [nhdsWithin]
274+
exact le_inf inf_le_left (Filter.le_principal_iff.mpr h_target)
275+
have h_chart_eq_e : ∀ᶠ e in 𝓝[Set.range I] (extChartAt I x x),
276+
chartAt H ((extChartAt I x).symm e) = chartAt H x :=
277+
h_symm_tendsto h_chart_eq_orig
278+
-- Combine with chart-target containment.
279+
filter_upwards [h_target, h_chart_eq_e] with e he_target hy_eq
280+
have h_symm_e_src : (extChartAt I x).symm e ∈ (chartAt H x).source := by
281+
have := (extChartAt I x).map_target he_target
282+
rwa [extChartAt_source] at this
283+
-- Now Helper #1 logic at point phi.symm e (which has chart equal to chart at x):
284+
have h_comp := mfderiv_extChartAt_comp_mfderivWithin_extChartAt_symm
285+
(I := I) (M := M) (x := x) he_target
286+
-- mfderiv (extChartAt I x) (phi.symm e) = id (using chart-coherence at phi.symm e)
287+
have h_id_at_symm : mfderiv I 𝓘(ℝ, E_M) (extChartAt I x) ((extChartAt I x).symm e)
288+
= ContinuousLinearMap.id ℝ E_M := by
289+
rw [← TangentBundle.continuousLinearMapAt_trivializationAt h_symm_e_src,
290+
TangentBundle.continuousLinearMapAt_trivializationAt_eq_core h_symm_e_src]
291+
have h_achart_eq : achart H ((extChartAt I x).symm e) = achart H x := Subtype.ext hy_eq
292+
rw [h_achart_eq]
293+
ext v
294+
exact (tangentBundleCore I M).coordChange_self (achart H x) ((extChartAt I x).symm e)
295+
(by simpa [tangentBundleCore_baseSet] using h_symm_e_src) v
296+
rw [h_id_at_symm] at h_comp
297+
simpa using h_comp
298+
244299
/-! ### Helper #2: chart-compose `mfderiv` reduces to flat `fderivWithin`
245300
246301
For a flat function `g : E_M → F` differentiable within `range I` at the
@@ -473,7 +528,7 @@ theorem mfderiv_iterate_sub_eq_mlieBracket_apply
473528
show mDirDeriv (fun y => g_chart_W (phi y)) x (V x)
474529
- mDirDeriv (fun y => g_chart_V (phi y)) x (W x)
475530
= mDirDeriv f x (mlieBracket I V W x)
476-
-- Smoothness premises (sorry'd; bounded follow-up via f C² + V, W C¹).
531+
-- Smoothness premises (closed via chain rules + chart bridges).
477532
have h_f_loc_C2 : ContDiffWithinAt ℝ 2 f_loc s (extChartAt I x x) :=
478533
(contMDiffAt_iff.mp hf).2
479534
-- V/W as functions M → E_M (using TangentSpace I y = E_M definitionally), pulled back via phi.symm.
@@ -631,15 +686,39 @@ theorem mfderiv_iterate_sub_eq_mlieBracket_apply
631686
rw [h_id]
632687
rw [show (ContinuousLinearMap.id ℝ E_M).inverse = ContinuousLinearMap.id ℝ E_M
633688
from ContinuousLinearMap.inverse_id]
634-
simp only [ContinuousLinearMap.coe_id, id_eq, Set.preimage_univ, Set.univ_inter]
689+
simp only [Set.preimage_univ, Set.univ_inter, id_eq]
635690
-- Goal: lieBracketWithin V_loc W_loc s (phi x)
636691
-- = lieBracketWithin (mpullbackWithin V) (mpullbackWithin W) (range I) (phi x)
637-
-- Need: V_loc =ᶠ[𝓝[s] (phi x)] mpullbackWithin V (range I) (and similarly W) so
638-
-- lieBracketWithin congruence applies.
639-
-- mpullbackWithin V (range I) e := (mfderivWithin phi.symm s e).inverse (V (phi.symm e))
640-
-- At e = phi x: mfderivWithin = id (Helper #3) → mpullbackWithin V (phi x) = V x = V_loc (phi x).
641-
-- Eventually-equal version of Helper #3 needed for lieBracketWithin congruence.
642-
sorry
692+
-- Use eventually-equal of mpullbackWithin V with V_loc + lieBracketWithin congruence.
693+
have h_mfderivWithin_id := mfderivWithin_extChartAt_symm_eq_id_eventually
694+
(I := I) (M := M) x
695+
have h_mpullback_V_eq : mpullbackWithin 𝓘(ℝ, E_M) I (extChartAt I x).symm V (Set.range I)
696+
=ᶠ[𝓝[Set.range I] (extChartAt I x x)] V_loc := by
697+
filter_upwards [h_mfderivWithin_id] with e h_id_e
698+
show mpullbackWithin 𝓘(ℝ, E_M) I (extChartAt I x).symm V (Set.range I) e
699+
= V_loc e
700+
show (mfderivWithin 𝓘(ℝ, E_M) I (extChartAt I x).symm (Set.range I) e).inverse
701+
(V ((extChartAt I x).symm e))
702+
= V_loc e
703+
rw [h_id_e, show (ContinuousLinearMap.id ℝ E_M).inverse = ContinuousLinearMap.id ℝ E_M
704+
from ContinuousLinearMap.inverse_id]
705+
rfl
706+
have h_mpullback_W_eq : mpullbackWithin 𝓘(ℝ, E_M) I (extChartAt I x).symm W (Set.range I)
707+
=ᶠ[𝓝[Set.range I] (extChartAt I x x)] W_loc := by
708+
filter_upwards [h_mfderivWithin_id] with e h_id_e
709+
show mpullbackWithin 𝓘(ℝ, E_M) I (extChartAt I x).symm W (Set.range I) e
710+
= W_loc e
711+
show (mfderivWithin 𝓘(ℝ, E_M) I (extChartAt I x).symm (Set.range I) e).inverse
712+
(W ((extChartAt I x).symm e))
713+
= W_loc e
714+
rw [h_id_e, show (ContinuousLinearMap.id ℝ E_M).inverse = ContinuousLinearMap.id ℝ E_M
715+
from ContinuousLinearMap.inverse_id]
716+
rfl
717+
have h_phi_x_in_range : (extChartAt I x x : E_M) ∈ Set.range I :=
718+
extChartAt_target_subset_range x (mem_extChartAt_target x)
719+
-- Apply Filter.EventuallyEq.lieBracketWithin_vectorField_eq_of_mem (symm direction).
720+
exact (Filter.EventuallyEq.lieBracketWithin_vectorField_eq_of_mem h_mpullback_V_eq
721+
h_mpullback_W_eq h_phi_x_in_range).symm
643722
rw [h_lieBr_eq]
644723
exact h_helper2_f.symm
645724

SORRY_CATALOG.md

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,13 @@ require updating this file.
1818

1919
| Module | PRE-PAPER | CITED-BLACK-BOX | PAPER-INTERNAL | CONJECTURAL | Total |
2020
|--------|-----------|------------------|----------------|-------------|-------|
21-
| Riemannian | 4 | 0 | 0 | 0 | 4 |
21+
| Riemannian | 3 | 0 | 0 | 0 | 3 |
2222
| GeometricMeasureTheory | 5 | 9 | 0 | 0 | 14 |
2323
| MinMax | 3 | 9 | 0 | 0 | 12 |
2424
| Regularity | 0 | 2 | 0 | 0 | 2 |
25-
| **Total** | **12** | **20** | **0** | **0** | **34** |
25+
| **Total** | **11** | **20** | **0** | **0** | **33** |
2626

27-
## Riemannian (4)
28-
29-
| File:line | Identifier | Classification | Repair plan |
30-
|-----------|-----------|---------------|-------------|
31-
| `Foundations/HessianLie.lean:597` | `mfderiv_iterate_sub_eq_mlieBracket_apply` (h_lieBr_eq sub-step) | PRE-PAPER | Final remaining sub-sorry: `lieBracketWithin V_loc W_loc s (phi x) = id.inverse (lieBracketWithin (mpullbackWithin V) (mpullbackWithin W) (range I) (phi x))`. Closure: chart-inverse mfderivWithin = id eventually (Helper #3, analog of Helper #1 for inverse chart) + `id.inverse = id` simplification + `mpullbackWithin V = V_loc` identification. ~30 lines. All other smoothness premises + structure closed; this is the last bridge. |
27+
## Riemannian (3)
3228
| `Curvature.lean:76` | `ricciTraceMap.map_add'` | PRE-PAPER | C^∞-linearity of Ricci trace map in first argument. Derive from `koszulCovDeriv` linearity in `X` (now that `koszulLeviCivita_exists` is closed, the route via `leviCivitaConnection`'s tensoriality is unblocked). |
3329
| `Curvature.lean:77` | `ricciTraceMap.map_smul'` | PRE-PAPER | Same as above. |
3430
| `Curvature.lean:112` | `ricci_symm` | PRE-PAPER | Symmetry of Ricci. Closure path: `riemannCurvature_inner_diagonal_zero` (skew-symm of R as endomorphism) via metric-compat applied 2×, scalar Hessian-Lie (above), → trace = 0; combined with Bianchi I + first-arg antisymmetry to derive `ricci(X,Y) - ricci(Y,X) = -tr(R(X,Y) endo) = 0`. Blocked by `mfderiv_iterate_sub_eq_mlieBracket_apply`. |

0 commit comments

Comments
 (0)