Skip to content

Rényi-∞ divergence machinery for oracle-bounded reductions#1076

Draft
Gustavo2622 wants to merge 1 commit into
mainfrom
library_renyi_divergence
Draft

Rényi-∞ divergence machinery for oracle-bounded reductions#1076
Gustavo2622 wants to merge 1 commit into
mainfrom
library_renyi_divergence

Conversation

@Gustavo2622

Copy link
Copy Markdown
Contributor

The Rényi-∞ (max-divergence / dominance) machinery for bounded-query reductions:

  • RDiv.ec: Rényi-∞ / max-divergence (rdiv_inf, dominated) with probability preservation (dominated_pr / rdiv_inf_pr), structural composition (dmap/dlet/dprod/dlist/dexcepted/dcond/djoin/dfold/dfun), and a distinguisher layer (Sample, adv_rdiv_inf, adv_rdiv_inf_dlist).
  • BoundedPreSample.ec: fresh-sampling = presampling-a-list equivalence (eq_pr_fresh_ref) for bounded-query adversaries; admit-free.
  • RDivOracle.ec: parametric bounded-query advantage bound rdiv_bound_sampler (Pr[Game1] <= M^N * Pr[Game2]) via BoundedPreSample + dlist tensorization.

@Gustavo2622
Gustavo2622 requested a review from strub July 13, 2026 16:02
@Gustavo2622 Gustavo2622 self-assigned this Jul 13, 2026
The Rényi-∞ (max-divergence / dominance) machinery for bounded-query
reductions:

- RDiv.ec: Rényi-∞ / max-divergence (rdiv_inf, dominated) with probability
  preservation (dominated_pr / rdiv_inf_pr), structural composition
  (dmap/dlet/dprod/dlist/dexcepted/dcond/djoin/dfold/dfun), and a
  distinguisher layer (Sample, adv_rdiv_inf, adv_rdiv_inf_dlist).
- BoundedPreSample.ec: fresh-sampling = presampling-a-list equivalence
  (eq_pr_fresh_ref) for bounded-query adversaries; admit-free.
- RDivOracle.ec: parametric bounded-query advantage bound rdiv_bound_sampler
  (Pr[Game1] <= M^N * Pr[Game2]) via BoundedPreSample + dlist tensorization.
@strub
strub force-pushed the library_renyi_divergence branch from abd5301 to 5a014e7 Compare July 15, 2026 18:49
(* Single Iface clone — both top-level access target (consumers use
[RDO.Iface.Oracle]/[RDO.Iface.Adv]) and BPS substitution target. *)
clone import BPS_Iface as Iface with
type out_t = out_t,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use <- to avoid proliferation.


declare axiom A_bound1 :
hoare[ A(BPS1.Count(Sampler1)).main :
BPS1.Count.n = 0 ==> BPS1.Count.n <= N ].

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here you probably want a quantification over the initial value of the counter, so the result can be applied generally where there is a preamble that cannot trigger distinguishing behaviour. (Did we discuss this already? If so, ignore this.)

}.

module type Adv (O : Oracle) = {
proc main(p : param_t) : bool

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could generalise this to arbitrary return types. This would require replace all the raw res events in probabilities below with a "for all event over res (and perhaps the game's globals)".

Not super clear what value this would add, but the presampling argument certainly doesn't rely on the event being the game's output only.

If you choose to generalise, be careful: if you include the globals in scope, you will need to post-sample unused queries in the lazy version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants