Repository navigation
Conversation
…6.6] Prove that the derivative of a Legendre function is a bijection from the interior of its domain onto the interior of the domain of its conjugate, with inverse the derivative of the conjugate; Bregman duality in Legendre form; and that the conjugate is Legendre. Move Legendre.lean to Legendre/Basic.lean and let its existence of constrained minimizers start from a bounded sublevel set. Co-Authored-By: Claude Code <noreply@github.com>
AI review — changes requestedEach rubric is judged independently by multiple review agents; the PR merges only once every rubric is green — any rubric that is not green (changes requested, blocked, errored, stale, or not yet run) blocks the merge. See the rubrics.
♻️ = approved on an earlier commit, re-run before merge. Reviewing this diff at head |
…proofs Use NormedSpace.inclusionInDoubleDualLi for the injectivity and norm preservation of x ↦ ContinuousLinearMap.apply ℝ ℝ x, and point the Bregman projection docstring at the moved Legendre.Basic module. Co-Authored-By: Claude Code <noreply@github.com>
There was a problem hiding this comment.
🟡 api-design — request_changes claude/claude-opus-5-5
The new public surface matches [LS, Theorem 26.6] (a)–(c) and the module move leaves no compatibility layer, but two general facts about the bidual are kept private inside LMLExplore.IsLegendre instead of being public in a general file.
LMLExplore/Analysis/Convex/Legendre/Conjugate.lean:61—apply_injectiveandnorm_applyare general facts aboutContinuousLinearMap.apply ℝ ℝ : E → (E →L[ℝ] ℝ) →L[ℝ] ℝ(it is injective and preserves the norm). They are hidden asprivatein theLMLExplore.IsLegendrenamespace, but the public∇F⋆statements inAnalysis/Convex/Conjugate.leanuse the same map, so users have to prove these facts again. Fix: Make them public under theContinuousLinearMapnamespace (e.g.ContinuousLinearMap.apply_injective,ContinuousLinearMap.norm_apply_apply) in a general or ForMathlib file thatConjugate.leancan import, and use them from there.
Reply in this thread to contest a finding; that re-runs only this rubric and posts an answer here. (To fix it, just push a commit — that re-reviews on its own. To contest again after an answer, post a NEW reply rather than editing an old one.)
claude/claude-opus-5-5 · 22s · 85.9k in (77k cache read, 8.9k cache write) / 2.2k out tokens · reviewing this diff · rubric
This PR completes [LS, Theorem 26.6] for Legendre functions. It proves that the derivative of a Legendre function
Fwith domainDis a bijection from the interior ofDonto the interior of the effective domain of the conjugateF⋆ = fenchelConjugateOn F D, and that the inverse of this bijection is∇F⋆(part (a)). It also proves Bregman duality in the formD_{F⋆}(∇F y, ∇F x) = D_F(x, y)(part (b)) and that the real representative ofF⋆is Legendre on{u | F⋆ u ≠ ⊤}(part (c)). No lower semicontinuity ofFat the boundary is assumed.Roadmap: Bandits
Milestone: Bandits Layer 6, item 1 ("Legendre functions"), which asks for [LS, Theorem 26.6] (the gradient is a bijection between interiors with inverse ∇F⋆,
D_F(x,y) = D_{F⋆}(∇F(y), ∇F(x)), andF⋆is Legendre), [LS, Corollary 26.8] and [LS, Proposition 26.14]. Corollary 26.8, Proposition 26.14, the definition and the conversion to Tau Ceti'sfenchelConjugateare already onmain(#289, #319). The pieces this PR builds on are onmaintoo: #321 gives bounded tilted sublevel sets and #322 gives strict convexity and steepness through the derivative. After this PR, item 6.1 has nothing left.Surjectivity of
∇Fworks by minimizing the tilted Legendre functionF - uoverD. Its sublevel sets are bounded by #321'sisBounded_setOf_le_of_mem_interior_setOf_fenchelConjugate_ne_top, butF - uneed not have a minimizer over its domain. So the private existence lemma behindIsLegendre.existsUnique_isMinOn_internow takes a bounded sublevel set{x ∈ A ∩ D | F x ≤ F x₀}instead of a global minimizer, and is exposed asIsLegendre.existsUnique_isMinOn_inter_of_isBounded.existsUnique_isMinOn_interkeeps its statement and is now a corollary of it.New declarations:
LMLExplore/Analysis/Convex/Legendre/Conjugate.lean(new):IsLegendre.injOn_fderivIsLegendre.mapsTo_fderivIsLegendre.surjOn_fderivIsLegendre.bijOn_fderivIsLegendre.fderiv_toReal_fenchelConjugateOn_fderivIsLegendre.fderiv_toReal_fenchelConjugateOn_eq_apply_iffIsLegendre.bregDiv_toReal_fenchelConjugateOnIsLegendre.toReal_fenchelConjugateOn(F⋆is Legendre)Conjugate.lean:convexOn_toReal_fenchelConjugateOn(the conjugate is convex on its effective domain, through Tau Ceti'sconvexOn_toRealandconvex_epigraph_fenchelConjugate)Legendre/Basic.lean:IsLegendre.existsUnique_isMinOn_inter_of_isBoundedModule moves (
git mvplus the module docstring, no declaration renames; nothing imported the old path):LMLExplore.Analysis.Convex.LegendreLMLExplore.Analysis.Convex.Legendre.BasicNo public declaration is removed or renamed. The informal sources are [LS, Theorem 26.6] and Rockafellar, Convex Analysis, Theorem 26.5, both cited in the module docstring. No Mathlib material is vendored.
🤖 Prepared with Claude Code