Skip to content

Commit b4c4f5f

Browse files
Connection: smooth-VF-direction strengthening for covDeriv smoothness
Strengthens the 3rd conjunct of `leviCivitaConnection_exists` from constant-direction (`v : E`) to smooth-VF-direction (`X : SmoothVectorField I M`). Adds public accessors `leviCivitaConnection_smoothAt_smoothVF_dir` and `covDeriv_smoothVF_smoothAt`. Backward-compatibility: the original constant-direction accessor `leviCivitaConnection_smoothAt_const_dir` and `covDeriv_const_smoothVF_smoothAt` derive from the strengthened form via `SmoothVectorField.const v` (no signature change to existing consumers in `Curvature`, `Gradient`, `Bochner`). Net sorry count unchanged: the underlying PRE-PAPER sorry `koszulCovDeriv_const_smoothAt` is renamed to `koszulCovDeriv_smoothVF_smoothAt` with strengthened statement (same Riesz-section repair plan closes both forms — the generalisation is "free" from the repair perspective). Constant-case derived as specialisation. Infrastructure for the heart-of-Bochner closure chain (Commit 1 of 7): unlocks variable-direction `covDeriv ∇f w(y)` smoothness needed by `secondCovDerivAt` right-slot bilinearity and by metric-compatibility chains in `riemannCurvature_inner_self_zero`'s closure.
1 parent 8299a18 commit b4c4f5f

1 file changed

Lines changed: 74 additions & 34 deletions

File tree

OpenGALib/Riemannian/Connection.lean

Lines changed: 74 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

13681368
set_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).
13771384
Repair plan: write `metricRiesz_section_smoothAt` against the new API
13781385
using chart-pullback unwrapping of the Riesz isomorphism, then restore the
13791386
original 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`. -/
13801396
private 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).
13951411
The metric-compat statement assumes smooth $X, Y, Z$ — matching do Carmo's
13961412
textbook 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
14061425
invariant "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
14751489
Riemannian 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
15221536
Direct projection from the 3rd conjunct of `leviCivitaConnection_exists`'s
15231537
strengthened 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`. -/
15261554
theorem 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+
20822122
end Riemannian

0 commit comments

Comments
 (0)