Skip to content

Commit 6eecf03

Browse files
committed
refactor(LipschitzSmooth): fold Cocoercive.lean into Gradient.lean
`CocoerciveWith` shares the Hilbert-space context with the gradient-form characterisations of `LipschitzSmoothWith` and was always going to be a small, focused file. Folding it eliminates one module with no import overhead — `Gradient.lean` already imports `Gradient.Basic`.
1 parent c5147c2 commit 6eecf03

2 files changed

Lines changed: 21 additions & 40 deletions

File tree

Mathlib/Analysis/Calculus/LipschitzSmooth/Cocoercive.lean

Lines changed: 0 additions & 40 deletions
This file was deleted.

Mathlib/Analysis/Calculus/LipschitzSmooth/Gradient.lean

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ characterisation. For differentiable `f`, `fderiv ℝ f x (y - x) = ⟪∇ f x,
1616
via Riesz representation (`inner_gradient_left`), and the descent inequality becomes
1717
`f y ≤ f x + ⟪∇ f x, y - x⟫ + K/2 · ‖y - x‖²`. The descent lemma (converse direction)
1818
and the Baillon-Haddad equivalence with cocoercivity are deferred to follow-ups.
19+
20+
This file also defines the **`CocoerciveWith K f`** predicate (the conclusion of the
21+
Baillon-Haddad theorem) and the elementary direction `K`-cocoercive ⟹ `K`-Lipschitz
22+
gradient.
1923
-/
2024

2125
public section
@@ -46,3 +50,20 @@ theorem inner_gradient_sub_le (h : LipschitzSmoothWith K f) (x y : F)
4650
exact h.fderiv_sub_apply_le x y hfx hfy
4751

4852
end LipschitzSmoothWith
53+
54+
/-! ### Cocoercivity -/
55+
56+
/-- A function `f : F → ℝ` on a Hilbert space is **`K`-cocoercive** if its gradient satisfies
57+
`‖∇ f y - ∇ f x‖² ≤ K · ⟪∇ f y - ∇ f x, y - x⟫` for all `x, y`. Equivalent to the standard
58+
`(1/K)·‖·‖² ≤ ⟪·,·⟫` form when `0 < K`, but well-defined and meaningful even at `K = 0`
59+
(then forces `∇ f` constant). The conclusion of the Baillon-Haddad theorem. -/
60+
abbrev CocoerciveWith (K : NNReal) (f : F → ℝ) : Prop :=
61+
∀ x y : F, ‖∇ f y - ∇ f x‖ ^ 2 ≤ ↑K * ⟪∇ f y - ∇ f x, y - x⟫
62+
63+
/-- A `K`-cocoercive gradient is `K`-Lipschitz. (One direction of the Baillon-Haddad
64+
characterisation; the reverse requires convexity.) -/
65+
theorem CocoerciveWith.lipschitzWith_gradient (h : CocoerciveWith K f) : LipschitzWith K (∇ f) :=
66+
lipschitzWith_iff_dist_le_mul.mpr fun x y => by
67+
simp only [dist_eq_norm']
68+
nlinarith [h x y, mul_nonneg K.coe_nonneg (norm_nonneg (y - x)),
69+
mul_le_mul_of_nonneg_left (real_inner_le_norm (∇ f y - ∇ f x) (y - x)) K.coe_nonneg]

0 commit comments

Comments
 (0)