Repository navigation
feat: Track-and-Stop with C-tracking from the sample-complexity reduction - #386
Merged
lmlexplore-automation[bot] merged 1 commit intoNov 14, 2026
Conversation
…tion Derive `eventually_expectedStoppingTime_cTrackAndStop_le` from the plug-in GLRT reduction `eventually_expectedStoppingTime_glrt_plugInCost_le_of_isBigO` with `W = C`, delete the private `mul_le_glr_plugInCost_of_mem_thickening`, and state once the argument over the rounds that the D-tracking and C-tracking analyses share (Generalization 1.11). Co-Authored-By: Claude Code <noreply@github.com>
Contributor
Author
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 |
Merged
via the queue into
LeanMachineLearning:main
with commit Nov 14, 2026
137597e
17 of 20 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR derives the sample complexity of Track-and-Stop with C-tracking from the plug-in GLRT reduction of Generalization 1.10 and deletes the private
mul_le_glr_plugInCost_of_mem_thickening. It also states once, as a lemma, the argument over the rounds that the D-tracking and C-tracking proofs both repeated. This is Generalization 1.11 ("Track-and-Stop with C-tracking from the reduction"): "Deriveeventually_expectedStoppingTime_cTrackAndStop_leandeventually_expectedStoppingTime_cTrackAndStop_le_of_charTime_ltfrom the reduction of target 1.10, with their constants as in the Conventions, and delete the privatemul_le_glr_plugInCost_of_mem_thickeningand the argument over the rounds that the two proofs ofTrackAndStop.leanshare." Target 1.10 landed in #374.Roadmap: Generalization
All changes are in
Identification/TrackAndStop.lean, and no public statement changes:IdentTask.eventually_expectedStoppingTime_cTrackAndStop_leis nowIdentTask.eventually_expectedStoppingTime_glrt_plugInCost_le_of_isBigOwithW = C. The rateκ, the thickening argument and the call toeventually_expectedStoppingTime_glrt_leare gone from the proof, which now only shows that C-tracking's proportions of pulls converge toCon good events. Its constant stays(⨅ v ∈ C, task.altCost μ v i)⁻¹ < c, and_of_charTime_lt(withtask.charTime μ < c) and the union-bound and almost-sure corollaries still follow from it unchanged. Those are the constants the Conventions require.exists_tsum_measure_compl_ne_top_forall_ge_empMean'_memis the round argument the two proofs shared. It takes a box of vectors of means aroundμinside a neighbourhoodW, uses forced exploration to show the empirical means stay in the box from roundt₀ Ton, and builds eventsE Twith∑ P((E T)ᶜ) < ∞on which an almost-sure propertyGholds (the tracking guarantee) and the empirical means lie inWat every roundk ≥ t₀ T. The forced-exploration bound is a hypothesis, so D-tracking passesDTracking.tsum_measure_exists_ge_empMean_notMem_Ioo_ne_topand C-tracking passesCTracking.tsum_measure_exists_ge_empMean_notMem_Ioo_ne_top.eventually_expectedStoppingTime_trackAndStop_le(D-tracking) now uses it as well.pullCount_div_mem_thickeningreplacesmul_le_glr_plugInCost_of_mem_thickening. It keeps only the step about proportions of pulls: if the targets are allocationsε-close to the convex setCfrom roundt₀on, and the pull counts follow the cumulated targets up toe, thenN(T) / Tisη-close toCwhene + (1 + B) t₀ + ε T < η T[DK19, Lemma 6]. It no longer mentions the GLR statistic, the task or the recommendation, matching the D-tracking stepdist_pullCount_div_ltfrom feat: one sample-complexity reduction for the plug-in GLRT, and Track-and-Stop with D-tracking from it #374.Removed: the private
mul_le_glr_plugInCost_of_mem_thickening. No public declaration is removed or renamed. The file shrinks by 36 lines (129 added, 165 removed).What remains: nothing for Generalization 1.11. Both Track-and-Stop sample-complexity theorems now come from the one reduction, which is the Completion check "the D- and C-tracking sample-complexity theorems are derived from one reduction". Target 1.11 unblocks Identification 5.2.
Reuse: the proofs use the existing
IdentTask.eventually_expectedStoppingTime_glrt_plugInCost_le_of_isBigO,Convex.exists_mem_norm_sum_sub_smul_le(Analysis/Convex/Normed.lean),exists_pi_Icc_subset_of_mem_nhds, Mathlib'sMetric.hasBasis_nhdsSet_thickening(for compactC, the thickenings are a basis of𝓝ˢ C) and the forced-exploration and tracking lemmas ofDTracking.leanandCTracking.lean. The two new private lemmas are restatements of steps already onmain, and I greppedLMLExplore/and Mathlib for an existing "good events from forced exploration" lemma and found none. The statements follow [GK16, proof of Theorem 14] and [DK19, Lemma 6 and Theorem 7], which the docstrings cite.Verification (local checks only; CI verifies the pushed PR):
scope: scoped: against c4a9e04dde775bf5a60d932b093c88ab01b9246a; whole-librarylake build --iofailgreen (8563 jobs);local-axioms: checked 1 changed module(s), 47 declaration(s); 0 violation(s); module-system, header-style and the environment lint (14 environment linters, 3 documentation checks) pass on the changed module.🤖 Prepared with Claude Code