Repository navigation
feat: e-processes for an i.i.d. null grow at most at the bipolar rate in expectation [RR26, Lemma 3.3] - #413
Conversation
… in expectation [RR26, Lemma 3.3] The value at time `n` of an e-process for the i.i.d. laws of a null, in the filtration of the observations, is a function of the first `n + 1` observations with expectation at most one under the null, hence an `n + 1`-sample e-variable composed with the initial segment. Its expected logarithm under the i.i.d. law of the alternative is at most `maxLogGrowth Q₁ S₁ (n + 1)`, and at most `(n + 1) * bipolarRate Q₁ S₁` (EValues roadmap, Layer 6.1). Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0196ftMVbgjSJzPQEwdek3kM
There was a problem hiding this comment.
🟡 proof-quality — request_changes claude/claude-opus-5-5
Proofs are short and mostly robust, but one calc step closes by a bare rfl that unfolds the bundled logUtility to ENNReal.log, which is an undocumented definitional equality across a wrapper.
LMLExplore/EValues/BipolarRate/EProcess.lean:134— Afterrw [... eintegral_map ...], the goal∫ᵉ ω, ENNReal.log ((G ∘ initSeg n) ω) = ∫ᵉ ω, (logUtility ∘ G) (initSeg n ω)is closed byrfl, which only works by unfolding the bundledlogUtility(it has a.measurablefield) intoENNReal.log. This undocumented defeq will break iflogUtility's representation changes. Fix: Replacerflwith a rewrite by the coercion/apply lemma forlogUtility(e.g.simp [Function.comp_def, logUtility_apply]), adding that lemma upstream if it is missing; or state the calc's middle term withENNReal.log ∘ Gand convert once through the named lemma.
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 · 41s · 130.2k in (120.1k cache read, 10k cache write) / 2.6k 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 |
Move initSeg, initSeg_apply, measurable_initSeg, exists_measurable_eq_comp_initSeg and measurePreserving_initSeg to LMLExplore/Probability/ProductMeasure.lean (namespace MeasureTheory), and close the logUtility step by logUtility_apply instead of rfl. Co-Authored-By: Claude Code <noreply@github.com>
…ound # Conflicts: # LMLExplore/MeasureTheory/MeasurableSpace/Constructions.lean
…asic Add the introduction lemmas dependsOn_initSeg and dependsOn_comp_initSeg, converse to exists_measurable_eq_comp_initSeg, and move the module LMLExplore.EValues.BipolarRate to LMLExplore.EValues.BipolarRate.Basic next to the new BipolarRate/EProcess.lean. Co-Authored-By: Claude Code <noreply@github.com>
….i.d. sequence Replace the inline re-derivations in infinitePi_fin_mem_and_forall_add_mem and hasLaw_arm_fin_streamMeasure by measurePreserving_initSeg. Co-Authored-By: Claude Code <noreply@github.com>
25192c3
Main (LeanMachineLearning#413) moved LMLExplore/EValues/BipolarRate.lean to LMLExplore/EValues/BipolarRate/Basic.lean; point the Circle and FiniteSupport imports at the new module. Co-Authored-By: Claude Code <noreply@github.com>
This pull request proves that no e-process for an i.i.d. null grows faster than the bipolar rate in expectation [RR26, Lemma 3.3]. It adds one new file,
LMLExplore/EValues/BipolarRate/EProcess.lean, movesLMLExplore/EValues/BipolarRate.leantoLMLExplore/EValues/BipolarRate/Basic.leannext to it, and adds the general initial-segment API (initSegand its lemmas, which do not depend on e-values) to the existingLMLExplore/MeasureTheory/MeasurableSpace/Constructions.leanandLMLExplore/Probability/ProductMeasure.lean.Setting
The observations are the coordinates of
ℕ → 𝓧. The null is the set of i.i.d. lawsMeasure.infinitePi fun _ ↦ P,P ∈ S₁, withS₁a set of probability measures, and the alternative is the i.i.d. law of a probability measureQ₁. E-processes are taken in Mathlib'sFiltration.piLE, whose σ-algebra at timenis generated by the observations0, …, n. So the value of an e-process at timenis a function ofn + 1observations, and the statements are indexed accordingly.Main declarations
LMLExplore/MeasureTheory/MeasurableSpace/Constructions.lean, namespaceMeasureTheory:initSeg n, withinitSeg_apply,measurable_initSeg,dependsOn_initSeg,dependsOn_comp_initSegandexists_measurable_eq_comp_initSeg: the firstnobservations of a sequence as a function onFin n; it and any function of it depend only on the firstncoordinates; conversely a measurable function that depends on the firstncoordinates factors through it. InLMLExplore/Probability/ProductMeasure.lean:measurePreserving_initSeg, under an i.i.d. law it has the product law. The inline re-derivations of this fact inMeasure.infinitePi_fin_mem_and_forall_add_memand inhasLaw_arm_fin_streamMeasure(LMLExplore/SequentialLearning/SumRewards.lean) now use it.exists_isEVar_eq_comp_initSeg: a function of the firstnobservations with expectation at most one under the i.i.d. laws of the null is ann-sample e-variable composed withinitSeg n.eintegral_log_le_maxLogGrowth_of_dependsOn: such a function has expected logarithm at mostmaxLogGrowth Q₁ S₁ nunder the i.i.d. law ofQ₁.IsEProcess.eintegral_log_le_maxLogGrowth: for an e-processE,∫ᵉ log (E n) ≤ maxLogGrowth Q₁ S₁ (n + 1).IsEProcess.eintegral_log_le_mul_bipolarRate:∫ᵉ log (E n) ≤ (n + 1) * bipolarRate Q₁ S₁.IsEProcess.eintegral_log_div_le_bipolarRateandIsEProcess.limsup_eintegral_log_div_le_bipolarRate: the expected logarithm per observation seen is at most the bipolar rate at every time, and so is itslimsup[RR26, Lemma 3.3].Roadmap coverage (EValues, Layer 6, item 1)
Covered: in the second bullet, "every e-process
Whaslimsup (1/n) ∫ᵉ log (W n) ∂Q ≤ dper observation, sinceW nis an e-variable of the observations it has seen". The bound is proved at every time, not only in the limit.Left for later pull requests:
d[RR26, Theorem 3.5];d = KL_infunder lower semicontinuity, the strictness example, the sequential null and the almost sure bound;initSeg(fromProductMeasure.lean) andeintegral_log_le_maxLogGrowth_of_dependsOn.This pull request shares no content with the open #399 and #402.
Removed or renamed
LMLExplore.EValues.BipolarRateis renamed toLMLExplore.EValues.BipolarRate.Basic(no declaration renamed). Downstream imports ofLMLExplore.EValues.BipolarRateshould importLMLExplore.EValues.BipolarRate.Basicinstead.Notes for reviewers
n + 1, the number of observations thatFiltration.piLE nknows, not by the timen. With this normalization the bound holds at every time and thelimsupstatement is a one-line consequence.exists_measurable_eq_comp_initSegextends a finite sequence by a constant, which needsNonempty 𝓧; the theorems get it from the probability measureQ₁. Mathlib's factorization lemmas throughFiltration.piLEgo toFinset.Iic n → 𝓧, whilemaxLogGrowthis indexed byFin n.ℕ → 𝓧(Measure.infinitePi).Roadmap: EValues
Paper: RemyDegenne/evalues_research
Item: R34
🤖 Generated with Claude Code
https://claude.ai/code/session_0196ftMVbgjSJzPQEwdek3kM