Repository navigation
feat: identifying the numeraire through the effective null [LRR25, Theorem 4.1] - #411
Conversation
…eorem 4.1] Co-Authored-By: Claude Code <noreply@github.com>
There was a problem hiding this comment.
🟡 generality — request_changes claude/claude-opus-5-5
The earlier over-strong hS_prob assumption is gone, and the special cases are still derived from the general criterion. One redundant hypothesis remains: both generated-null theorems require hX₀, which already follows from h_one.
LMLExplore/EValues/Numeraire.lean—isNumeraire_of_lintegral_div_le_oneassumeshX₀ : ∀ᵐ ω ∂Q, X ω ≠ 0, buth_one : ∫⁻ (X ω)⁻¹ ∂Q = 1already implies it: ifQ {X = 0} > 0, the integral ofX⁻¹is∞. Fix: DrophX₀and derive it inside the proof:(ae_lt_top hX.measurable.inv (h_one ▸ ENNReal.one_ne_top)).mono fun ω h ↦ (ENNReal.inv_lt_top.mp h).ne'.LMLExplore/EValues/Numeraire.lean—ripr_mem_of_lintegral_div_le_onehas the same redundanthX₀. It only passes it on toisNumeraire_of_lintegral_div_le_one, alongsideh_one. Fix: RemovehX₀here as well once the previous fix is made.
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 · 31s · 52.7k in (45.4k cache read, 7.3k cache write) / 2.9k 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 |
…he probability-null hypothesis Address review on the numeraire criteria: state the identity ∫⁻ Y ∂(Q.withDensity X⁻¹) = ∫⁻ Y / X ∂Q once, prove h_add from the decomposition μ = (μ - ν) + ν directly, derive ν ≪ P from Measure.smul_absolutelyContinuous, drop the unneeded IsProbabilityMeasure hypothesis on the generated null (only finiteness is needed for the RIPr statement), and make the Corollary 4.2 docstrings state the hypotheses. Co-Authored-By: Claude Code <noreply@github.com>
…ypothesis Drop the redundant hypothesis `hX₀` from `isNumeraire_of_lintegral_div_le_one` and `ripr_mem_of_lintegral_div_le_one`: it follows from `∫⁻ X⁻¹ ∂Q = 1`. Co-Authored-By: Claude Code <noreply@github.com>
…re-theory lemma Move the private `lintegral_withDensity_inv` out of `EValues/Numeraire.lean` into `MeasureTheory/Measure/WithDensity.lean` as the public `MeasureTheory.lintegral_withDensity_inv_eq_lintegral_div`, stated for almost-everywhere measurable functions. Co-Authored-By: Claude Code <noreply@github.com>
393c982
This PR adds
LMLExplore/EValues/Numeraire.lean(346 lines, one new file, no existing file changed). It proves the verification criteria that identify Statlib's numeraire e-variable through the effective null, for EValues Layer 1, item 2, Identifying numeraires [LRR25, Theorem 4.1, Corollary 4.2; RW, Theorem 6.15], together with the likelihood-ratio corollaries that item lists [RW, Theorem 3.20; LRR25, Corollary 3.15].Roadmap: EValues
Milestone: EValues Layer 1.2, "Identifying numeraires". Covered here:
Q ≪ Sand aQ-a.s. positive e-variableX*withP* = Q.withDensity X*⁻¹,X*is the numeraire exactly whenP* ∈ effectiveSet S(isNumeraire_iff_withDensity_inv_mem_effectiveSet);P*is then Statlib'sripr Q S(IsNumeraire.ripr_eq) and is equivalent toQ(absolutelyContinuous_ripr, pluswithDensity_absolutelyContinuous); andP*is maximal (IsNumeraire.eq_withDensity_inv_of_le).isNumeraire_iff_exists_ae_eq_rnDeriv; the sufficient directionisNumeraire_of_ae_eq_rnDerivneeds noQ ≪ S).isNumeraire_of_lintegral_div_le_one,ripr_mem_of_lintegral_div_le_one).IsNumeraire (Q.rnDeriv P) {P} QforQ ≪ P[RW, Theorem 3.20] (isNumeraire_rnDeriv). Its valueklDiv Q Pis already Statlib'smaxUtility_singleton_eq_klDiv, so it is cited rather than restated. Without absolute continuity:∞on aP-null setNoff whichQ ≪ P, and(Q[|Nᶜ]).rnDeriv PonNᶜ[LRR25, Corollary 3.15] (isNumeraire_piecewise_rnDeriv_cond). As the roadmap's "derive as corollaries" asks,isNumeraire_rnDerivis the caseN = ∅of it.All of these come from one statement that holds for every finite
Qand every null:isNumeraire_iff_smul_withDensity_inv_mem_effectiveSetsays thatXis the numeraire iff(Q X.fsupport)⁻¹ • Q.withDensity X⁻¹ ∈ effectiveSet S(the normalisation of [LRR25, Theorem 3.13]). "Q ≪ S" is stated inline as∀ s, MeasurableSet s → (∀ P ∈ S, P s = 0) → Q s = 0, andIsEVar.ae_ne_top_of_forall_measure_eq_zerorecords its consequence that e-variables areQ-a.s. finite.What remains in Layer 1.2 after this PR: the dominated criterion [LRR25, Theorem 4.7] and the
L¹convergence of [LRR25, Corollary 4.11], which both need the bipolar theorem of Layer 1.1 [BS99]; the σ-algebra and stopping-time corollaries [RW, Proposition 3.22, Corollary 3.23, Theorem 7.11; KG22, Theorem 5], which need an∫ᵉ/trimlemma that does not exist yet; the monotone-likelihood-ratio families [RW, Proposition 2.18]; and the GROW corollaries [GdHK24; LGH24].Correction to the source: LRR25's Corollary 3.15 also says the RIPr is
P₀ᵃ. With Statlib'sripr Q S = Q.withDensity (numeraire Q S)⁻¹, the RIPr isQ(Nᶜ) • P₀ᵃ(example:P₀ = ½δ_a + ½δ_b,Q = ½δ_b + ½δ_cgivesripr = ¼δ_b). So only the numeraire part of that corollary is stated.Reuse: built on Statlib's
isNumeraire_iff,IsNumeraire.ae_unique,isNumeraire_numeraire,ripr,ripr_mem_effectiveSet,rnDeriv_ripr,absolutelyContinuous_ripr_of_ae_ne_top,effectiveSet, on LMLExplore'smem_effectiveSet_of_leandsubset_effectiveSet(EValues/EffectiveSet.lean), and on Mathlib'sMeasure.inv_rnDeriv,Measure.withDensity_rnDeriv_le,cond_mul_eq_inter'andwithDensity_indicator. Before writing each declaration I grepped Mathlib, Statlib, TauCeti, LML andLMLExplore/for it (e.g.ripr_eq,isNumeraire_rnDeriv,ae_ne_top_of,withDensity_inv), as well as the open EValues PRs (#401, #402, #404, #405, #409); none overlaps. No Mathlib infrastructure is vendored.Local checks (not CI):
scope: scoped: against a890e2a, whole-librarylake build --iofailgreen,local-axioms: checked 1 changed module(s), 20 declaration(s); 0 violation(s), module-system, header style and environment lint passing.🤖 Prepared with Claude Code