@@ -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
246301For 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
0 commit comments