Skip to content

Commit eeb6012

Browse files
Bochner E: leibniz_trace_reduction proved (~140 lines)
Closes E sorry. Proof structure: 1. Unfold scalarLaplacian to ∑ᵢ hessian g (const εᵢ) (const εᵢ) x. 2. Per-summand expansion via hessian_gradientNormSq_apply_chartFrame helper, with (1/2)*2 = 1 absorbed. 3. Split sum into ⟨secondCovDerivAt, ∇f⟩ + ‖covDerivAt ∇f εᵢ‖² parts. 4. First part: bilinearity (sum_inner) + connectionLaplacian as trace (connectionLaplacian_eq_sum_secondCovDerivAt). 5. Second part: orthonormal basis decomposition (OrthonormalBasis.sum_sq_inner_left + real_inner_self_eq_norm_sq) to identify with frobeniusSq (hessianBilin f) x = ‖hess_g[I] f‖²_g x. Hypothesis tightening: E only needs h_grad (the gradient C^∞ witness); h_interior and hf were vestigial parallel-API placeholders, dropped. H still passes h_interior + hf to G. Sorry: 35 → 34 (E closed, only G remains).
1 parent 4308729 commit eeb6012

3 files changed

Lines changed: 87 additions & 30 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
--include="*.lean" \
2323
OpenGALib \
2424
2>/dev/null | wc -l | tr -d ' ')
25-
EXPECTED=35
25+
EXPECTED=34
2626
if [ "$ACTUAL" -ne "$EXPECTED" ]; then
2727
echo "::error::Sorry count drift: expected $EXPECTED, found $ACTUAL"
2828
echo "If the change is intentional, update docs/SORRY_CATALOG.md (and the EXPECTED constant in this workflow)."

OpenGALib/Riemannian/Operators/Bochner.lean

Lines changed: 81 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -284,38 +284,96 @@ $$\tfrac{1}{2}\,\Delta_g \, |\nabla f|_g^2 \;=\;
284284
\langle \Delta_\nabla \nabla f,\, \nabla f \rangle_g
285285
+ |\nabla^2 f|_g^2.$$
286286
287-
This is the trace form of the Leibniz product rule applied twice to
288-
$\langle \nabla f, \nabla f\rangle_g$ in the $g$-orthonormal frame
289-
`stdOrthonormalBasis ℝ (TangentSpace I x)`.
290-
291-
**Sorry: PRE-PAPER**. Closure path:
292-
1. apply `leviCivitaConnection_metric_compatible` to $(\nabla f, \nabla f, \varepsilon_i)$
293-
to get $\nabla_{\varepsilon_i} \langle \nabla f, \nabla f\rangle_g
294-
= 2 \langle \nabla_{\varepsilon_i} \nabla f, \nabla f\rangle_g$;
295-
2. apply metric-compat again to differentiate $\langle \nabla_{\varepsilon_i} \nabla f, \nabla f\rangle_g$
296-
in the $\varepsilon_i$-direction, yielding
297-
$\langle \nabla_{\varepsilon_i} \nabla_{\varepsilon_i} \nabla f, \nabla f\rangle_g
298-
+ \langle \nabla_{\varepsilon_i} \nabla f, \nabla_{\varepsilon_i} \nabla f\rangle_g$;
299-
3. sum over $i$, identify the second sum with $|\nabla^2 f|_g^2$ via
300-
`frobeniusSq` in the $g$-orthonormal frame;
301-
4. reduce the iterated chart-coord trace
302-
$\sum_i \mathrm{mfderiv}^2 \,(|\nabla f|^2_g)\,\varepsilon_i\,\varepsilon_i$
303-
to $\Delta_g(|\nabla f|^2_g)\,(x)$ via `scalarLaplacian` definition + the
304-
Christoffel-correction matching of `secondCovDerivAt` against
305-
`connectionLaplacian` (`connectionLaplacian_eq_sum_secondCovDerivAt`).
287+
Combines `hessian_gradientNormSq_apply_chartFrame` (per-direction Leibniz
288+
expansion) summed over `stdOrthonormalBasis ℝ (TangentSpace I x)`,
289+
with `connectionLaplacian_eq_sum_secondCovDerivAt` for the trace identification
290+
and `OrthonormalBasis.sum_sq_inner_left` for the Hessian Frobenius²
291+
identification (orthonormal basis decomposition of $\|\nabla_{\varepsilon_i}
292+
\nabla f\|_g^2$).
306293
307294
Used in `bochner_weitzenboeck` (assembly step H) along with G. -/
308295
theorem leibniz_trace_reduction
309296
[IsManifold I 2 M]
310297
(f : M → ℝ) (x : M)
311-
(h_interior : extChartAt I x x ∈ closure (interior (Set.range I)))
312-
(hf : ContMDiff I 𝓘(ℝ, ℝ) ∞ f)
313298
(h_grad : ContMDiff I (I.prod 𝓘(ℝ, E)) ∞
314299
(fun y => (⟨y, manifoldGradient (I := I) f y⟩ : TangentBundle I M))) :
315300
(1 / 2 : ℝ) * (Δ_g[I] ‖grad_g[I] f‖²_g) x
316301
= ⟪connectionLaplacian (grad_g[I] f) x, (grad_g[I] f) x⟫_g
317302
+ ‖hess_g[I] f‖²_g x := by
318-
sorry
303+
show (1 / 2 : ℝ) * Operators.scalarLaplacian (I := I) (M := M) (‖grad_g[I] f‖²_g) x
304+
= metricInner x
305+
(connectionLaplacian (I := I) (M := M) (manifoldGradient (I := I) f) x)
306+
(manifoldGradient (I := I) f x)
307+
+ frobeniusSq (I := I) (M := M) (hessianBilin (I := I) f) x
308+
unfold scalarLaplacian
309+
rw [Finset.mul_sum]
310+
-- Per-summand expansion via the helper, with `(1/2) * 2 = 1`
311+
have h_summand : ∀ i,
312+
(1 / 2 : ℝ) * hessian (I := I) (M := M) (‖grad_g[I] f‖²_g)
313+
(fun _ : M => ((stdOrthonormalBasis ℝ (TangentSpace I x)) i
314+
: TangentSpace I x))
315+
(fun _ : M => ((stdOrthonormalBasis ℝ (TangentSpace I x)) i
316+
: TangentSpace I x)) x
317+
= metricInner x
318+
(secondCovDerivAt (I := I) (M := M) (manifoldGradient (I := I) f) x
319+
((stdOrthonormalBasis ℝ (TangentSpace I x)) i)
320+
((stdOrthonormalBasis ℝ (TangentSpace I x)) i))
321+
(manifoldGradient (I := I) f x)
322+
+ metricInner x
323+
(covDerivAt (manifoldGradient (I := I) f) x
324+
((stdOrthonormalBasis ℝ (TangentSpace I x)) i))
325+
(covDerivAt (manifoldGradient (I := I) f) x
326+
((stdOrthonormalBasis ℝ (TangentSpace I x)) i)) := by
327+
intro i
328+
rw [hessian_gradientNormSq_apply_chartFrame f x _ h_grad]
329+
ring
330+
rw [Finset.sum_congr rfl (fun i _ => h_summand i), Finset.sum_add_distrib]
331+
-- Goal:
332+
-- ∑ᵢ metricInner x (sCD ∇f x εᵢ εᵢ) (∇f x)
333+
-- + ∑ᵢ metricInner x (covD ∇f x εᵢ) (covD ∇f x εᵢ)
334+
-- = metricInner x (connectionLaplacian (∇f) x) (∇f x) + frobeniusSq (hessianBilin f) x
335+
congr 1
336+
· -- First sum: bilinearity of metricInner + connectionLaplacian as trace bridge
337+
rw [connectionLaplacian_eq_sum_secondCovDerivAt]
338+
-- Goal: ∑ᵢ ⟨sCD εᵢ εᵢ, ∇f⟩ = ⟨∑ᵢ sCD εᵢ εᵢ, ∇f⟩
339+
-- via `sum_inner` on the InnerProductSpace ℝ (TangentSpace I x) instance
340+
-- (`metricInner x` = `⟪·,·⟫` def-eq via RiemannianBundle routing)
341+
exact (sum_inner Finset.univ
342+
(fun i =>
343+
secondCovDerivAt (I := I) (M := M) (manifoldGradient (I := I) f) x
344+
((stdOrthonormalBasis ℝ (TangentSpace I x)) i)
345+
((stdOrthonormalBasis ℝ (TangentSpace I x)) i))
346+
(manifoldGradient (I := I) f x)).symm
347+
· -- Second sum: ∑ᵢ ‖covD ∇f x εᵢ‖² = frobeniusSq (hessianBilin f) x
348+
-- frobeniusSq B x = ∑ᵢ ∑ⱼ (B x εᵢ εⱼ)²; per-i this is ‖covD ∇f x εᵢ‖² via
349+
-- orthonormal basis decomposition (`OrthonormalBasis.sum_sq_inner_left`).
350+
show ∑ i, metricInner x
351+
(covDerivAt (manifoldGradient (I := I) f) x
352+
((stdOrthonormalBasis ℝ (TangentSpace I x)) i))
353+
(covDerivAt (manifoldGradient (I := I) f) x
354+
((stdOrthonormalBasis ℝ (TangentSpace I x)) i))
355+
= frobeniusSq (I := I) (M := M) (hessianBilin (I := I) f) x
356+
unfold frobeniusSq
357+
refine Finset.sum_congr rfl ?_
358+
intro i _
359+
set b := stdOrthonormalBasis ℝ (TangentSpace I x)
360+
set v : TangentSpace I x :=
361+
covDerivAt (manifoldGradient (I := I) f) x (b i)
362+
-- For each i: metricInner x v v = ∑ⱼ ((hessianBilin f x) (b i) (b j))²
363+
-- = ∑ⱼ (metricInner x v (b j))² (by hessianBilin def + LinearMap.mk₂_apply)
364+
-- = ∑ⱼ ⟪v, b j⟫_ℝ² (def-eq metricInner ↔ inner)
365+
-- = ‖v‖² (by OrthonormalBasis.sum_sq_inner_left)
366+
-- = metricInner x v v (def-eq)
367+
have h_hess_unfold : ∀ j, ((hessianBilin (I := I) f x) (b i)) (b j)
368+
= metricInner x v (b j) := fun _ => rfl
369+
simp only [h_hess_unfold]
370+
-- Goal: metricInner x v v = ∑ⱼ (metricInner x v (b j))^2
371+
-- Chain: metricInner x v v = ⟪v, v⟫_ℝ = ‖v‖^2 = ∑ⱼ ⟪v, b j⟫^2 = ∑ⱼ (metricInner x v (b j))^2
372+
calc metricInner x v v
373+
= ⟪v, v⟫_ℝ := rfl
374+
_ = ‖v‖ ^ 2 := real_inner_self_eq_norm_sq v
375+
_ = ∑ j, ⟪v, b j⟫_ℝ ^ 2 := (b.sum_sq_inner_left v).symm
376+
_ = ∑ j, (metricInner x v (b j)) ^ 2 := rfl
319377

320378
/-- **G — heart-of-Bochner reduction**: the connection Laplacian on $\nabla f$
321379
contracted with $\nabla f$ equals the inner product of $\nabla f$ with the
@@ -386,7 +444,7 @@ theorem bochner_weitzenboeck
386444
‖hess_g[I] f‖²_g x
387445
+ ⟪(grad_g[I] f) x, (grad_g[I] (Δ_g[I] f)) x⟫_g
388446
+ Ric_g((grad_g[I] f) x, (grad_g[I] f) x) x := by
389-
rw [leibniz_trace_reduction f x h_interior hf h_grad,
447+
rw [leibniz_trace_reduction f x h_grad,
390448
connectionLaplacian_grad_eq_grad_laplacian_add_ricci f x h_interior hf h_grad]
391449
abel
392450

docs/SORRY_CATALOG.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ public count.
2525
|--------|-----------|------------------|-------|
2626
| Algebraic | 5 | 0 | 5 |
2727
| Tensor | 9 | 0 | 9 |
28-
| Riemannian | 6 | 0 | 6 |
28+
| Riemannian | 5 | 0 | 5 |
2929
| GeometricMeasureTheory | 5 | 10 | 15 |
30-
| **Total** | **25** | **10** | **35** |
30+
| **Total** | **24** | **10** | **34** |
3131

32-
CI workflow `.github/workflows/ci.yml` asserts the total equals 35 (`EXPECTED=35`).
32+
CI workflow `.github/workflows/ci.yml` asserts the total equals 34 (`EXPECTED=34`).
3333

3434
## Algebraic (5)
3535

@@ -55,16 +55,15 @@ CI workflow `.github/workflows/ci.yml` asserts the total equals 35 (`EXPECTED=35
5555
| `DifferentialForm/Basic.lean:326` | `pullback_ederiv` (outer) | PRE-PAPER | Outer goal of same proof. |
5656
| `Product/Pretrivialization.lean:281` | `tensorProductCoordChange_contMDiffOn` | PRE-PAPER | Bundle pretrivialization plumbing; Mathlib gap on tensor-product bundle smoothness. |
5757

58-
## Riemannian (6)
58+
## Riemannian (5)
5959

6060
| File:line | Identifier | Classification | Notes |
6161
|-----------|-----------|---------------|-------|
6262
| `Curvature.lean:241` | `riemannCurvature_inner_self_zero` | PRE-PAPER | Skew-symmetry of $R(X,Y)$. Closure path: metric-compat 4× + Hessian-Lie identity (`mfderiv_iterate_sub_eq_mlieBracket_apply`). Proof body sketches it. |
6363
| `Curvature.lean:256` | `ricci_symm` | PRE-PAPER | Symmetry of Ricci. Closure path: trace-via-orthonormal-basis + Bianchi I (closed) + diagonal-zero (above). |
6464
| `Connection.lean:1387` | `koszulCovDeriv_const_smoothAt` | PRE-PAPER | Path-B cascade leftover. Closure: write `metricRiesz_section_smoothAt` against `Bundle.ContMDiffRiemannianMetric` API via chart-pullback unwrapping of the Riesz isomorphism. Self-build follow-up. |
6565
| `Gradient.lean:76` | `manifoldGradient_smooth_of_smooth` | PRE-PAPER | Gradient smoothness propagation: $g \in C^\infty \Rightarrow \nabla^M g$ is $C^\infty$ as bundle section. Mathematically trivial; framework-side closure shares the `metricRiesz_section_smoothAt` chartGramMatrix path with `koszulCovDeriv_const_smoothAt`. Once that primitive lands, this is one-line composition. |
66-
| `Operators/Bochner.lean:96` | `leibniz_trace_reduction` (E) | PRE-PAPER | Bochner intermediate: $\tfrac12 \Delta_g \|\nabla f\|^2 = \langle \Delta_\nabla \nabla f, \nabla f\rangle + \|\nabla^2 f\|^2$. Closure path: metric-compat ×2 on $\langle \nabla f, \nabla f\rangle$ + trace via `stdOrthonormalBasis` + `connectionLaplacian_eq_sum_secondCovDerivAt` + `manifoldGradient_smooth_of_smooth` (for $\nabla(\|\nabla f\|^2)$). Detailed plan in docstring. |
67-
| `Operators/Bochner.lean:135` | `connectionLaplacian_grad_eq_grad_laplacian_add_ricci` (G) | PRE-PAPER | Bochner intermediate: $\langle \Delta_\nabla \nabla f, \nabla f\rangle = \langle \nabla f, \nabla(\Delta_g f)\rangle + \mathrm{Ric}(\nabla f, \nabla f)$. Closure path: D.2 (Ricci identity, closed) + B (Hessian symmetry, closed modulo gradient smoothness) + F (Ricci trace formula, closed) + grad duality. Detailed plan in docstring. |
66+
| `Operators/Bochner.lean` | `connectionLaplacian_grad_eq_grad_laplacian_add_ricci` (G) | PRE-PAPER | Bochner intermediate: $\langle \Delta_\nabla \nabla f, \nabla f\rangle = \langle \nabla f, \nabla(\Delta_g f)\rangle + \mathrm{Ric}(\nabla f, \nabla f)$. Closure path: D.2 (Ricci identity, closed) + B (Hessian symmetry, closed modulo gradient smoothness) + F (Ricci trace formula, closed) + grad duality. Detailed plan in docstring. |
6867

6968
## GeometricMeasureTheory (15)
7069

0 commit comments

Comments
 (0)