Repository navigation
feat: identifying numeraires through the effective null - #410
Conversation
The verification theorem of Larsson, Ramdas and Ruf (LRR25, Theorem 4.1): a Q-almost surely finite e-variable X is the numeraire exactly when Q.withDensity X⁻¹ is in the effective null, which is then the reverse information projection. With absolute continuity with respect to a set of measures, the likelihood-ratio, dominated and generating-family criteria, and the numeraire of a simple null. Co-Authored-By: Claude Code <noreply@github.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🟡 documentation — request_changes claude/claude-opus-5-5
The docstrings match their statements, except the module-level summary of the dominated criterion in Numeraire.lean, which leaves r undefined and drops the hypotheses on R.
LMLExplore/EValues/Numeraire.lean:55— The Main-statements bullet forisNumeraire_div_rnDeriv_iffsays 'with densitiesq,pandrwith respect to a σ-finite reference measure,q / ris the numeraire exactly when ...' but never says thatris the density of a memberRof the effective null withQ ≪ R. It also omits thatSconsists of probability measures, so it claims more than the theorem proves. Fix: Rewrite the bullet as '... withrthe density of a memberRof the effective null withQ ≪ R, for a nullSof probability measures,q / ris the numeraire exactly when∫⁻ p / r ∂Q ≤ 1for everyP ∈ S.'
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 · 28s · 67.1k in (59.6k cache read, 7.5k cache write) / 2.3k out tokens · reviewing this diff · rubric ·
AI review — approvedEach 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 |
…kelihood-ratio lemmas Move `MeasureTheory.Measure.AbsolutelyContinuousSet` and its basic API to `LMLExplore/MeasureTheory/Measure/AbsolutelyContinuousSet.lean`, adding `AbsolutelyContinuousSet.ae_of_forall_ae` and `AbsolutelyContinuousSet.absolutelyContinuous`. Move `absolutelyContinuousSet_of_mem_effectiveSet` to `EffectiveSet.lean`, factor out `isEVar_piecewise_top`, and derive `ae_ne_top` and `absolutelyContinuous_of_mem_effectiveSet` from the new lemmas. Add `isNumeraire_iff_isEVar_of_ae_eq_rnDeriv`, from which the likelihood-ratio criteria follow, unfold `ripr` explicitly, and fix the docstrings' hypotheses. Co-Authored-By: Claude Code <noreply@github.com>
Co-Authored-By: Claude Code <noreply@github.com>
…lity hypothesis of ae_of_forall_ae Co-Authored-By: Claude Code <noreply@github.com>
…umeraires-worker3 # Conflicts: # LMLExplore/EValues/Numeraire.lean
There was a problem hiding this comment.
🟡 generality — request_changes claude/claude-opus-5-5
IsEVar.measure_fsupport_eq_measure_univ keeps the stronger Q.AbsolutelyContinuousSet S hypothesis although it only uses the consequence that X is Q-almost surely finite, and isNumeraire_of_withDensity_inv_mem_effectiveSet re-proves the same full-support argument inline because the lemma is stated too strongly. The other new statements are at the right level of generality.
LMLExplore/EValues/Numeraire.lean:182—IsEVar.measure_fsupport_eq_measure_univassumeshQS : Q.AbsolutelyContinuousSet S, but uses it only throughhQS.ae_ne_top hX; it does not needIsEVareither, onlyMeasurable X. This is inconsistent with the PR's own weakening of three other theorems tohX_top. Fix: Restate it astheorem measure_fsupport_eq_measure_univ [IsFiniteMeasure Q] (hX : Measurable X) (hX_top : ∀ᵐ ω ∂Q, X ω ≠ ∞) (hX₀ : ∀ᵐ ω ∂Q, X ω ≠ 0) : Q X.fsupport = Q univ. InIsNumeraire.eq_withDensity_inv_of_le(line 219), passhQS.ae_ne_top hX.isEVar, or weaken that theorem tohX_topas well, since that is its only use ofhQS.LMLExplore/EValues/Numeraire.lean:160—isNumeraire_of_withDensity_inv_mem_effectiveSetre-proves the generalised lemma inline: itsh_suppblock (ae_iff_measure_eq hX.measurable_fsupport.nullMeasurableSet+filter_upwards [hX_top, hX_zero]) duplicates the body ofmeasure_fsupport_eq_measure_univ. Fix: After generalising the lemma as above, replace theh_suppblock with(hX.measurable.measure_fsupport_eq_measure_univ hX_top hX_zero).trans measure_univ, or the equivalent call.
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 · 28s · 70.9k in (59.6k cache read, 11.2k cache write) / 2.6k out tokens · reviewing this diff · rubric ·
… finite function Replace `IsEVar.measure_fsupport_eq_measure_univ`, which assumed `Q ≪ S`, with `measure_fsupport_eq_measure_univ`, which assumes only that the function is `Q`-almost surely positive and finite, and reuse it in `isNumeraire_of_withDensity_inv_mem_effectiveSet`. State the hypotheses of the dominated criterion in the module docstring. Co-Authored-By: Claude Code <noreply@github.com>
a8fc605
This PR builds on the numeraire file that #411 merged (
LMLExplore/EValues/Numeraire.lean, [LRR25, Theorem 4.1]). It adds the material from the roadmap item that is not onmainyet: absolute continuity with respect to a set of measures, the e-variable characterization of it [LRR25, Theorem 2.6], the verification theorem under the weaker hypothesis that the candidate numeraire is almost surely finite, the dominated criterion [LRR25, Theorem 4.7], and the identification of the reverse information projection from a likelihood ratio.Roadmap target: EValues, Layer 1, item 2, Identifying numeraires [LRR25, Theorem 2.6, Theorem 4.1, Corollary 4.2, Theorem 4.7; RW, Theorem 6.15].
Roadmap: EValues
Contents:
MeasureTheory.Measure.AbsolutelyContinuousSet Q S(new fileLMLExplore/MeasureTheory/Measure/AbsolutelyContinuousSet.lean) is theQ ≪ Sof [LRR25]: every measurable set that is null for every member ofSisQ-null. Its API:absolutelyContinuousSet_iff,measure_eq_zero,ae_of_forall_ae,absolutelyContinuous(transfer to a dominating measure),mono,@[simp] absolutelyContinuousSet_singleton_iff(it isQ ≪ Pfor{P}),AbsolutelyContinuous.trans_absolutelyContinuousSetandAbsolutelyContinuous.absolutelyContinuousSet.EVariable.lean:isEVar_piecewise_top(the e-variable that is∞on a null set and1elsewhere),AbsolutelyContinuousSet.ae_ne_top, andabsolutelyContinuousSet_iff_forall_isEVar_ae_ne_top:Q ≪ Sholds exactly when every e-variable isQ-almost surely finite [LRR25, Theorem 2.6].EffectiveSet.lean:absolutelyContinuousSet_of_mem_effectiveSet.measure_eq_zero_of_mem_effectiveSetandabsolutelyContinuous_of_mem_effectiveSetare now derived from the shared lemmas, and their statements are unchanged.Numeraire.lean:withDensity_inv_mem_effectiveSet_iff:Q.withDensity X⁻¹is in the effective null exactly when∫⁻ Y / X ∂Q ≤ 1for every e-variableY.isNumeraire_of_withDensity_inv_mem_effectiveSet, and the verification theoremisNumeraire_iff_withDensity_inv_mem_effectiveSet, now assume only thatXisQ-almost surely finite (hX_top). This is weaker thanQ ≪ S, which implies it throughAbsolutelyContinuousSet.ae_ne_top.ripr_eq_of_isEVar_rnDeriv: a memberRof the effective null that is equivalent toQ, whose likelihood ratioQ.rnDeriv Ris an e-variable, is the reverse information projection.ripr_singleton_eqis its special case for simple nulls.isNumeraire_div_rnDeriv_iff: the dominated criterion∫⁻ p / r ∂Q ≤ 1 ∀ P ∈ S[LRR25, Theorem 4.7], for any σ-finite reference measure.Changes to declarations already on
main(from #411):ProbabilityTheory.IsEVar.ae_ne_top_of_forall_measure_eq_zero. UseMeasureTheory.Measure.AbsolutelyContinuousSet.ae_ne_topinstead:hX.ae_ne_top_of_forall_measure_eq_zero hQSbecomeshQS.ae_ne_top hX.ProbabilityTheory.IsEVar.measure_fsupport_eq_measure_univ(which assumedIsFiniteMeasure Q,IsEVar X SandQ ≪ S) withProbabilityTheory.measure_fsupport_eq_measure_univ (hX_top : ∀ᵐ ω ∂Q, X ω ≠ ∞) (hX₀ : ∀ᵐ ω ∂Q, X ω ≠ 0) : Q X.fsupport = Q univ, which needs no other hypothesis:hX.measure_fsupport_eq_measure_univ hQS hX₀becomesmeasure_fsupport_eq_measure_univ (hQS.ae_ne_top hX) hX₀.isNumeraire_of_withDensity_inv_mem_effectiveSetnow uses it instead of repeating its proof.hQS : ∀ s, MeasurableSet s → (∀ P ∈ S, P s = 0) → Q s = 0is nowhQS : Q.AbsolutelyContinuousSet SinabsolutelyContinuous_ripr,IsNumeraire.eq_withDensity_inv_of_leandisNumeraire_iff_exists_ae_eq_rnDeriv.isNumeraire_iff_withDensity_inv_mem_effectiveSet,isNumeraire_of_lintegral_div_le_oneandripr_mem_of_lintegral_div_le_one. Each one replaces the hypotheseshQS(andhX₀for the first) withhX_top : ∀ᵐ ω ∂Q, X ω ≠ ∞, and callers passhQS.ae_ne_top hX.Several declarations in this PR's earlier version duplicated declarations that #411 put on
main, so they were dropped in favour of themainversions:IsNumeraire.ripr_eq_withDensityduplicatedIsNumeraire.ripr_eq.AbsolutelyContinuousSet.absolutelyContinuous_riprduplicatedabsolutelyContinuous_ripr.isNumeraire_iff_isEVar_of_ae_eq_rnDerivandisNumeraire_rnDeriv_iffduplicatedisNumeraire_of_ae_eq_rnDeriv.isNumeraire_iff_isEVar_of_withDensity_inv_leduplicatedisNumeraire_of_smul_withDensity_inv_le.isNumeraire_rnDeriv_singletonduplicatedisNumeraire_rnDeriv.IsEVar.isNumeraire_of_generatingduplicatedisNumeraire_of_lintegral_div_le_oneandripr_mem_of_lintegral_div_le_one.The proofs reuse Statlib's
isNumeraire_iff,isNumeraire_of_lintegral_div_le,IsNumeraire.ae_unique,rnDeriv_ripr,ripr_mem_effectiveSetandabsolutelyContinuous_ripr_of_ae_ne_top. From Mathlib they useMeasure.inv_rnDeriv,Measure.rnDeriv_eq_div,lintegral_rnDeriv_mulandwithDensity_rnDeriv_le. From LMLExplore they uselintegral_withDensity_inv_eq_lintegral_divandmem_effectiveSet_of_le. No formalization was vendored.Verification: the shared local checks (
tauceti-local-checks verify --policy ordinary) pass at 39f9a4e (merged withmainat ddb0c29). They reportscope: scoped: against ddb0c29ede5c0e178f175e983edbeb22c06a9c07andlocal-axioms: checked 4 changed module(s), 83 declaration(s); 0 violation(s). These are local checks, and CI verifies the pushed PR.🤖 Generated with Claude Code