@@ -1363,11 +1363,18 @@ private theorem koszulLeviCivita_exists [IsLocallyConstantChartedSpace H M] :
13631363 -- Goal: koszulCovDerivAux Y x hY X = koszulCovDeriv X Y x hX hY
13641364 simp only [koszulCovDerivAux, dif_pos hX]
13651365
1366- /-! ### Bridge: smoothness of `koszulCovDeriv (const v) Y.toFun y` at `x` -/
1366+ /-! ### Bridge: smoothness of `koszulCovDeriv X.toFun Y.toFun y` at `x` -/
13671367
13681368set_option backward.isDefEq.respectTransparency false in
1369- /-- For `v : E` and `Y : SmoothVectorField I M`, the section
1370- `y ↦ koszulCovDeriv (const v) Y.toFun y` is `TangentSmoothAt` at every `x`.
1369+ /-- For `X, Y : SmoothVectorField I M`, the section
1370+ `y ↦ koszulCovDeriv X.toFun Y.toFun y` is `TangentSmoothAt` at every `x`.
1371+
1372+ This is the smooth-VF-direction strengthening of the original
1373+ `koszulCovDeriv_const_smoothAt` (constant `v : E` direction); the constant
1374+ case is recovered by specialising to `X := SmoothVectorField.const v`. The
1375+ generalisation is "free" from the underlying repair plan: closing
1376+ `metricRiesz_section_smoothAt` in full generality (for any smooth
1377+ linear-functional section, not just the constant case) closes both forms.
13711378
13721379**PRE-PAPER gap** : the original closure used `metricRiesz_section_smoothAt`
13731380— smoothness of the Riesz section `y ↦ metricRiesz y (φ y)` for a smooth
@@ -1377,14 +1384,23 @@ smoothness witness (same shape gap as `metricTensor_apply_contMDiff` above).
13771384Repair plan: write `metricRiesz_section_smoothAt` against the new API
13781385using chart-pullback unwrapping of the Riesz isomorphism, then restore the
13791386original Riesz-uniqueness proof. Self-build follow-up. -/
1387+ private theorem koszulCovDeriv_smoothVF_smoothAt
1388+ [IsLocallyConstantChartedSpace H M]
1389+ (X Y : SmoothVectorField I M) (x : M) :
1390+ TangentSmoothAt
1391+ (fun y : M => koszulCovDeriv X.toFun Y.toFun y
1392+ (X.smoothAt y) (Y.smoothAt y)) x :=
1393+ sorry
1394+
1395+ /-- Constant-direction specialisation of `koszulCovDeriv_smoothVF_smoothAt`. -/
13801396private theorem koszulCovDeriv_const_smoothAt
13811397 [IsLocallyConstantChartedSpace H M]
13821398 (v : E) (Y : SmoothVectorField I M) (x : M) :
13831399 TangentSmoothAt
13841400 (fun y : M => koszulCovDeriv (fun _ : M => v) Y.toFun y
13851401 ((SmoothVectorField.const (I := I) (M := M) v).smoothAt y)
13861402 (Y.smoothAt y)) x :=
1387- sorry
1403+ koszulCovDeriv_smoothVF_smoothAt (SmoothVectorField.const v) Y x
13881404
13891405/-- **Existence theorem for the Levi-Civita connection.**
13901406
@@ -1395,14 +1411,17 @@ vector fields).
13951411The metric-compat statement assumes smooth $X, Y, Z$ — matching do Carmo's
13961412textbook setup; an unconditional form would be an over-statement.
13971413
1398- **Smoothness clause** (3rd conjunct): for any `Y : SmoothVectorField I M` and
1399- `v : E`, `y ↦ cov.toFun Y.toFun y v` is `TangentSmoothAt` at every point.
1400- Supports downstream smoothness witnesses in `Riemannian.Curvature` (used in
1401- `curvatureEndo` and `ricciTensor` linearity/bilinearity slots).
1402-
1403- Closed via `hcov` eq spec at `X = (fun _ => v)` + `koszulCovDeriv_const_smoothAt`
1404- (itself closed via Riesz uniqueness through `koszulCotangentCLM_smoothAt` —
1405- the **single remaining PRE-PAPER sub-sorry** in the chain). Phase 1.6
1414+ **Smoothness clause** (3rd conjunct): for any pair of smooth tangent
1415+ sections `X, Y : SmoothVectorField I M`, the section
1416+ `y ↦ cov.toFun Y.toFun y (X.toFun y)` is `TangentSmoothAt` at every point.
1417+ This is the smooth-VF-direction form needed for downstream curvature
1418+ identities (`Bochner.lean` heart-of-Bochner chain); the constant-direction
1419+ case is recovered as `leviCivitaConnection_smoothAt_const_dir` via
1420+ `SmoothVectorField.const v`.
1421+
1422+ Closed via `hcov` eq spec + `koszulCovDeriv_smoothVF_smoothAt` (itself
1423+ PRE-PAPER, closed via Riesz uniqueness through `koszulCotangentCLM_smoothAt`
1424+ — the **single remaining PRE-PAPER sub-sorry** in the chain). Phase 1.6
14061425invariant "zero existence axioms in the Riemannian package" preserved.
14071426
14081427**Ground truth** : do Carmo 1992 §2 Theorem 3.6 (existence + uniqueness via
@@ -1417,9 +1436,9 @@ theorem leviCivitaConnection_exists [IsLocallyConstantChartedSpace H M] :
14171436 mfderiv I 𝓘(ℝ, ℝ) (fun y => metricInner y (Y y) (Z y)) x (X x) =
14181437 metricInner x (cov.toFun Y x (X x)) (Z x) +
14191438 metricInner x (Y x) (cov.toFun Z x (X x))) ∧
1420- (∀ (Y : SmoothVectorField I M) (v : E ) (x : M),
1439+ (∀ (X Y : SmoothVectorField I M) (x : M),
14211440 TangentSmoothAt
1422- (fun y : M => cov.toFun Y.toFun y v ) x) := by
1441+ (fun y : M => cov.toFun Y.toFun y (X.toFun y) ) x) := by
14231442 obtain ⟨cov, hcov⟩ := koszulLeviCivita_exists (I := I) (M := M)
14241443 refine ⟨cov, ?_, ?_, ?_⟩
14251444 · -- Torsion = 0
@@ -1454,22 +1473,17 @@ theorem leviCivitaConnection_exists [IsLocallyConstantChartedSpace H M] :
14541473 show directionalDeriv (fun y => metricInner y (Y y) (Z y)) x (X x) =
14551474 (1 / 2 ) * koszulFunctional X Y Z x + (1 / 2 ) * koszulFunctional X Z Y x
14561475 linarith
1457- · -- Smoothness clause: reduce via `hcov` eq spec at X = (fun _ => v) to
1458- -- smoothness of `(fun y => koszulCovDeriv (const v) Y.toFun y _ _)`,
1459- -- then forward to the framework helper `koszulCovDeriv_const_smoothAt`.
1460- intro Y v x
1461- -- Pointwise eq: `cov.toFun Y.toFun y v = koszulCovDeriv (const v) Y.toFun y _ _`
1462- -- for every y, because both arguments are smooth at every y.
1463- have h_eq : (fun y : M => cov.toFun Y.toFun y v)
1464- = (fun y : M => koszulCovDeriv (fun _ : M => v) Y.toFun y
1465- ((SmoothVectorField.const (I := I) (M := M) v).smoothAt y)
1466- (Y.smoothAt y)) := by
1476+ · -- Smoothness clause (smooth-VF direction): reduce via `hcov` eq spec
1477+ -- to smoothness of `(fun y => koszulCovDeriv X.toFun Y.toFun y _ _)`,
1478+ -- then forward to `koszulCovDeriv_smoothVF_smoothAt`.
1479+ intro X Y x
1480+ have h_eq : (fun y : M => cov.toFun Y.toFun y (X.toFun y))
1481+ = (fun y : M => koszulCovDeriv X.toFun Y.toFun y
1482+ (X.smoothAt y) (Y.smoothAt y)) := by
14671483 funext y
1468- exact hcov (fun _ => v) Y.toFun y
1469- ((SmoothVectorField.const (I := I) (M := M) v).smoothAt y)
1470- (Y.smoothAt y)
1484+ exact hcov X.toFun Y.toFun y (X.smoothAt y) (Y.smoothAt y)
14711485 rw [h_eq]
1472- exact koszulCovDeriv_const_smoothAt v Y x
1486+ exact koszulCovDeriv_smoothVF_smoothAt X Y x
14731487
14741488/-- The **Levi-Civita connection** $\nabla$ on the tangent bundle of a
14751489Riemannian manifold $M$: the unique torsion-free, metric-compatible
@@ -1514,21 +1528,36 @@ theorem leviCivitaConnection_metric_compatible
15141528 ((leviCivitaConnection (I := I) (M := M)).toFun Z x (X x)) :=
15151529 (Classical.choose_spec leviCivitaConnection_exists).2 .1 X Y Z x hX hY hZ
15161530
1517- /-- **Smoothness of the Levi-Civita connection along chart-frame constant
1518- directions **: for any smooth section `Y` and any `v : E `, the section
1519- `y ↦ ∇ Y y v = leviCivitaConnection.toFun Y.toFun y v` is smooth at every
1520- point.
1531+ /-- **Smoothness of the Levi-Civita connection along a smooth vector
1532+ field direction **: for `X, Y : SmoothVectorField I M `, the section
1533+ `y ↦ ∇_{X(y)} Y(y) = leviCivitaConnection.toFun Y.toFun y (X.toFun y)`
1534+ is smooth at every point.
15211535
15221536Direct projection from the 3rd conjunct of `leviCivitaConnection_exists`'s
15231537strengthened existential. The smoothness clause itself is currently
15241538`sorry` (PRE-PAPER) inside the existence proof; downstream consumers
1525- (`Riemannian.Curvature` smoothness witnesses) depend on this accessor. -/
1539+ (`Riemannian.Curvature`, `Riemannian.Operators.Bochner` smoothness
1540+ witnesses) depend on this accessor. -/
1541+ theorem leviCivitaConnection_smoothAt_smoothVF_dir
1542+ [IsLocallyConstantChartedSpace H M]
1543+ (X Y : SmoothVectorField I M) (x : M) :
1544+ TangentSmoothAt
1545+ (fun y : M => (leviCivitaConnection (I := I) (M := M)).toFun Y.toFun y
1546+ (X.toFun y)) x :=
1547+ (Classical.choose_spec leviCivitaConnection_exists).2 .2 X Y x
1548+
1549+ /-- **Constant-direction specialisation** : for `v : E` constant and
1550+ `Y : SmoothVectorField I M`, the section
1551+ `y ↦ ∇ Y y v = leviCivitaConnection.toFun Y.toFun y v` is smooth at every
1552+ point. Backward-compatible projection from
1553+ `leviCivitaConnection_smoothAt_smoothVF_dir` with `X := const v`. -/
15261554theorem leviCivitaConnection_smoothAt_const_dir
15271555 [IsLocallyConstantChartedSpace H M]
15281556 (Y : SmoothVectorField I M) (v : E) (x : M) :
15291557 TangentSmoothAt
15301558 (fun y : M => (leviCivitaConnection (I := I) (M := M)).toFun Y.toFun y v) x :=
1531- (Classical.choose_spec leviCivitaConnection_exists).2 .2 Y v x
1559+ leviCivitaConnection_smoothAt_smoothVF_dir
1560+ (SmoothVectorField.const v) Y x
15321561
15331562/-- **Covariant derivative of one vector field along another** :
15341563$(\nabla_X Y)(x) := \nabla\,Y\,x\,(X\,x)$, where $\nabla$ is the
@@ -2079,4 +2108,15 @@ theorem covDeriv_const_smoothVF_smoothAt
20792108 (fun y : M => covDeriv (fun _ : M => v) Y.toFun y) x :=
20802109 Riemannian.leviCivitaConnection_smoothAt_const_dir Y v x
20812110
2111+ /-- $\nabla_X Y$ is smooth at every $x$ for any smooth vector fields
2112+ `X, Y : SmoothVectorField I M`. Smooth-VF-direction strengthening of
2113+ `covDeriv_const_smoothVF_smoothAt`; primary infrastructure consumer is
2114+ the Bochner–Weitzenböck heart-of-Bochner chain
2115+ (`Riemannian.Operators.Bochner`). -/
2116+ theorem covDeriv_smoothVF_smoothAt
2117+ (X Y : SmoothVectorField I M) (x : M) :
2118+ TangentSmoothAt
2119+ (fun y : M => covDeriv X.toFun Y.toFun y) x :=
2120+ Riemannian.leviCivitaConnection_smoothAt_smoothVF_dir X Y x
2121+
20822122end Riemannian
0 commit comments