Skip to content

Identical until bad: a common part, per-step costs, and coupled games - #29

Merged
MarcIlunga merged 1 commit into
mainfrom
until-bad
Oct 13, 2026
Merged

MarcIlunga merged 1 commit into
mainfrom
until-bad

Conversation

@MarcIlunga

@MarcIlunga MarcIlunga commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

Proof-technique stack, layer 4 (games on top of the systems level): identical until bad. It combines couplings (#26) with games equivalent as games (#28), and adds the per-step cost bound. The potential argument is proved once.

Systems level (RandomSystems/Distance/UntilBad.lean)

  • transcriptCost β h: the sum over the steps of a transcript of the cost β p x of the query x after the prefix p.
  • RandomSystem.one_sub_le_sum_tSupp, the potential argument (the union bound over the steps). If g lies below a random system R, g [] = 1, each step from a possible transcript by an admitted query loses at most β h x · R h of g, and every possible transcript costs at most ε, then the transcripts of a compatible environment within n rounds carry at least 1 - ε of g.
  • RandomSystem.transcriptDistance_le_of_transcriptCost_le: random systems above a common part, with those per-step costs, are within ε. The proof ladders' transcriptDistance_le_of_untilBad is the case β h x = β x (Upstream candidates from downstream projects: a layer-by-layer PR stack #14, L1d).

Games (RandomSystems/Game/UntilBad.lean)

  • A game that sets the MBO at each step with probability at most β h x times that of the unset transcript is won with probability at most ε, by a deterministic or a probabilistic distinguisher: winProbability_le_of_transcriptCost_le.
  • RandomSystem.GameEquivalent.transcriptDistance_visible_le: two games equivalent as games share their unset part, which is a common part of their visible systems, and the first game's per-step costs bound its missing mass. So the visible systems are within ε. Neither game needs to be monotone, and only the first needs to reply at the queried interface.
  • PDG.gameEquivalent_behavior_of_isCoupling: two discrete games with a joint law (Lanzenberger–Maurer, Theorem 2), whose pairs share the condition and answer alike while it does not hold, are equivalent as games (CR18, Definition 4.16; Maurer 2002, Definition 5).

Helpers in lower files

  • Distribution.mass_sub_mass_le_of_le: the one-sided common-part bound, which needs only the first law to have weight one; abs_mass_sub_le_of_le now applies it twice.
  • RandomSystem.sum_tSupp_succ: sums over transcripts within m + 1 rounds; sum_tSupp now uses it.
  • RandomSystem.sum_tagMBO: extracted from the proof of RandomSystem.visible.

THEORY.md §1.5 gets a paragraph.

Checks: build with --wfail, axiom audit (10,392 declarations), linter set on the new and changed code, anchors, math rendering, citations checked on the PDFs.

The stack

Proof techniques for the HCTR2 port, one technique per PR, ordered by abstraction (merge bottom-up):

  1. Bounds in ℝ≥0 #25 Bounds in ℝ≥0 (convention)
  2. Couplings of random systems #26 Couplings of random systems (systems)
  3. The H-coefficient bound for random systems #27 The H-coefficient bound for random systems (systems)
  4. Games equivalent as games and the fundamental lemma #28 Games equivalent as games and the fundamental lemma (games)
  5. Identical until bad: a common part, per-step costs, and coupled games #29 Identical until bad (games) ← this PR

🤖 Generated with Claude Code

https://claude.ai/code/session_01E7GPy1oUx164NSZsxJT3N9

Systems level (`RandomSystems/Distance/UntilBad.lean`): `transcriptCost β h`, the sum over the
steps of a transcript of the cost `β p x` of the query `x` after the prefix `p`. The potential
argument, proved once, is `RandomSystem.one_sub_le_sum_tSupp`: if `g` lies below a random system
`R`, `g [] = 1`, each step from a possible transcript by an admitted query loses at most
`β h x · R h` of `g`, and every possible transcript costs at most `ε`, then the transcripts of a
compatible environment within `n` rounds carry at least `1 - ε` of `g` (the union bound over the
steps; no source among the references). `RandomSystem.transcriptDistance_le_of_transcriptCost_le`
follows: random systems above a common part are within `ε`, via the common-part lemma. A bound
per query is the case `β h x = β x`.

Games (`RandomSystems/Game/UntilBad.lean`): the part of a game with every MBO unset lies below
its visible system, and a step loses from it the probability that the game sets the MBO
(`RandomSystem.mass_unsetMBOs_sub_sum_le`). A game that, from every transcript with every MBO
unset, sets the MBO at the next query with probability at most `β h x` times the probability of
the unset transcript is won with probability at most `ε`, by a deterministic and by a
probabilistic distinguisher (the potential argument on the unset part and the visible system,
then `exists_unset_winProbability`). `RandomSystem.GameEquivalent.transcriptDistance_visible_le`:
two games equivalent as games have the same unset part, a common part of their visible systems,
and the per-step costs of the first bound its missing mass, so the visible systems are within `ε`
by the systems-level corollary; neither game needs to be monotone, and only the first needs to
reply at the queried interface. `PDG.gameEquivalent_behavior_of_isCoupling`: two discrete games
with a joint law (Lanzenberger–Maurer, Theorem 2) whose pairs share the condition and answer
alike while it does not hold are equivalent as games (CR18, Definition 4.16; Maurer 2002,
Definition 5).

Below: `Distribution.mass_sub_mass_le_of_le`, the one-sided common-part bound, which needs only
the first law to have weight one; `abs_mass_sub_le_of_le` now applies it twice.
`RandomSystem.sum_tSupp_succ`, a sum over the transcripts within `m + 1` rounds as a sum over
those within `m` rounds and their extensions; `sum_tSupp` now uses it. `RandomSystem.sum_tagMBO`,
the replies with both MBOs weigh the transcript, extracted from the proof of
`RandomSystem.visible`. THEORY.md §1.5 gets a paragraph; `#print axioms` lines for the five
endpoints.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E7GPy1oUx164NSZsxJT3N9
@MarcIlunga
MarcIlunga changed the base branch from game-equivalence to main October 13, 2026 09:09
@MarcIlunga
MarcIlunga merged commit 335094a into main Oct 13, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant