Repository navigation
feat: convergence and optional stopping of ℝ≥0∞-valued supermartingales at arbitrary stopping times - #396
feat: convergence and optional stopping of ℝ≥0∞-valued supermartingales at arbitrary stopping times#396RemyDegenne wants to merge 5 commits into
Conversation
…es at arbitrary stopping times Define `stoppedValueLimsup`, the value of a process at a possibly infinite time with `limsup` at infinity, and prove almost sure convergence of `ℝ≥0∞`-valued supermartingales with finite initial expectation, closure by the limit, and optional stopping at arbitrary stopping times `σ ≤ τ` on sets measurable for the σ-algebra of `σ` [RW, Fact 7.5; ShSVV11, Theorem 1]. 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 |
Move `stoppedValueLimsup` and its basic API to the new `LMLExplore/Probability/Process/StoppedValueLimsup.lean`, move `IsTestSupermartingale.lintegral_zero_ne_top` to `TestSupermartingale.lean` and use it there, state the finite-measure hypothesis in the module docstring, and replace the inline `WithTop ℕ` successor chains by `ENat.natCast_add_one_le_iff`. Co-Authored-By: Claude Code <noreply@github.com>
…opping Replace the two uses of ENat.natCast_add_one_le_iff on WithTop ℕ goals, which relied on ENat unfolding to WithTop ℕ, with a private helper stated directly for WithTop ℕ. Co-Authored-By: Claude Code <noreply@github.com>
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 stoppedValueLimsup API is complete, its body is not exposed, and the simp annotations are sound. One general stopping-time lemma is in the wrong file, and one private helper duplicates Mathlib's Order.add_one_le_of_lt.
LMLExplore/Probability/Process/StoppedValueLimsup.lean:49—MeasureTheory.isStoppingTime_topis a general stopping-time fact that mentions only Mathlib types, but it was placed in the stoppedValueLimsup file instead of the library's existing stopping-time file. Fix: MoveisStoppingTime_toptoLMLExplore/Probability/Process/Stopping.lean, next tomeasurable_enat, and import it from there.LMLExplore/EValues/OptionalStopping.lean:96— The privatecoe_add_one_le_of_coe_ltis a generalWithTop ℕ(=ℕ∞) order fact that Mathlib already provides asOrder.add_one_le_of_lt. Fix: Delete the helper and useby exact_mod_cast Order.add_one_le_of_lt (α := ℕ∞) hat its two call sites (lines 116 and 143).
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 · 36s · 141.1k in (128k cache read, 13.1k cache write) / 3.4k out tokens · reviewing this diff · rubric ·
Co-Authored-By: Claude Code <noreply@github.com>
|
Do check what the conflict actually is before resolving it mechanically. If |
Superseded by #395#395 merged as Declaration mapping (this PR → main)
What is left, and why I am not keeping it
The branch is left in place. No commit was pushed. |
This PR adds
LMLExplore/EValues/OptionalStopping.leanandLMLExplore/Probability/Process/StoppedValueLimsup.lean. It proves thatℝ≥0∞-valued supermartingales converge, and that optional stopping holds at arbitrary stopping times. Together these complete the EValues target Layer 2, item 2: "Convergence and optional stopping inℝ≥0∞" [RW, Fact 7.5; ShSVV11, Theorem 1].Roadmap: EValues
It contains:
ProbabilityTheory.stoppedValueLimsup M τ. This is the value of a process at a timeτ : Ω → WithTop ι:M (τ ω) ωwhereτ ωis finite, andlimsup (M · ω)whereτ ω = ⊤. This follows the roadmap's Conventions [RRLK; RLKR23, (1.2)]. It and its API live inLMLExplore/Probability/Process/StoppedValueLimsup.lean, since they use no EValues theory. Its API:_of_eq_top,_of_ne_top,_of_eq_coeand_congr;_coeand_top, plus_const;stoppedProcess_eq_stoppedValueLimsup,limsup_stoppedProcess(the value is thelimsupof the stopped process) andtendsto_stoppedProcess_stoppedValueLimsup;measurable_stoppedValueLimsup.The pointwise API is stated for any linearly ordered time, like Mathlib's
stoppedValue/stoppedProcess. Its coercions are thenWithTop.some, which is what Mathlib's stopping-time lemmas produce.Convergence (first bullet of the item).
IsENNSupermartingale.ae_tendsto_limsup: under a finite measure, a supermartingale with finite initial expectation converges a.s. to itslimsup. This is derived from Mathlib'sSubmartingale.exists_ae_tendsto_of_bdd, through the existing bridgeIsENNSupermartingale.supermartingale_toReal. Further results:setLIntegral_limsup_le: the limit closes the supermartingale onℱ n-measurable sets;lintegral_limsup_le:∫⁻ M ∞ ≤ ∫⁻ M 0;ae_limsup_lt_top: the limit is a.s. finite;IsTestSupermartingale.lintegral_zero_ne_top, which is added toTestSupermartingale.leanand replaces the three inline proofs of that fact there.Optional stopping (second bullet).
IsENNSupermartingale.setLIntegral_stoppedValueLimsup_leis the roadmap statement: for stopping timesσ ≤ τwith values inWithTop ℕ, and everysmeasurable forhσ.measurableSpace,∫⁻ ω in s, stoppedValueLimsup M τ ω ∂P ≤ ∫⁻ ω in s, stoppedValueLimsup M σ ω ∂P. It assumes nothing beyond∫⁻ M 0 ∂P ≠ ∞and a finiteP. Other forms:setLIntegral_stoppedProcess_le: the fixed-time comparison of stopped processes, with no integrability at all;lintegral_stoppedValueLimsup_le;IsTestSupermartingale.lintegral_stoppedValueLimsup_le_one(the item's "in particular∫⁻ M τ ≤ 1") andisEVar_stoppedValueLimsup: the value at any stopping time is an e-variable.How each part is proved:
{σ ≤ n}and{n < τ}; this works directly inℝ≥0∞, with no subtraction.σ. Fatou's lemma along the stopped process, using the a.s. convergence.σ. The events{σ ≤ k}exhaust{σ < ⊤}, throughIsStoppingTime.measurableSet_inter_le_const_iff.Why this step next: Layer 3 (e-processes) is the next layer on the critical path, and it consumes
stoppedValueLimsupand this optional stopping theorem. The two consumers areIsEProcess.isEVar_stoppedValueLimsup(validity at all stopping times with thelimsupconvention, [RRLK, Lemma 6]) and the Snell-envelope characterisation of Layer 3.1. After this PR, Layer 2.2 has nothing left. The next Layer 2 work is item 3: the exact Ville identity and Ville's inequality inℝ≥0∞.Reuse: I searched Mathlib, Tau Ceti, Statlib, LML and
LMLExplore/forℝ≥0∞-valued supermartingale convergence, optional stopping with set integrals, and alimsup-valued stopped value, and found none. Mathlib'sSubmartingale.expected_stoppedValue_monocovers only bounded stopping times and integrable real processes, with no sets. This PR reuses:MeasureTheory.measurable_stoppedValue_of_countableandstoppedValue_of_eq(TauCeti/Probability/Process/StoppedValue.lean, newly imported; it is light);IsENNSupermartingalebridges.The private one-step lemma
setLIntegral_stoppedProcess_succ_leis the special case, forℱ n-measurable sets, ofIsENNSupermartingale.stoppedProcessin the open PR #391, which is not onmain. Once #391 lands, it can be replaced by(hM.stoppedProcess hτ).setLIntegral_succ_le. Insidenamespace IsENNSupermartingale,stoppedProcessis writtenMeasureTheory.stoppedProcess; otherwise #391's theorem of that name would shadow it. I checked that the file compiles with a stub of that theorem in scope.No declarations are removed or renamed.
Local checks (not CI):
tauceti-local-checks verify --policy ordinary—scope: scoped: against dca76852a43d553a35fb2afa9d31ae4b37501dde,local-sources: PASS, whole-librarylake build --iofailsucceeded,local-axioms: checked 3 changed module(s), 98 declaration(s); 0 violation(s), module-system, header-style, and environment lint (local-lint: checked 3 changed module(s), 98 declarations) passed.🤖 Prepared with Claude Code