Output Distribution of Computations #
This file defines HasEvalDist and related instances for OracleComp.
The possible outputs of mx when queries can output values in the specified sets.
NOTE: currently proofs using this should reduce to simulateQ. A full API would be better
Instances For
Reachable outputs of a bind are the reachable outputs of the continuation over reachable outputs of the first computation.
Membership form of [OracleComp.supportWhen_bind].
Enlarging the set of possible oracle outputs only enlarges the reachable output set.
The support instance for OracleComp, defined as
Alias of OracleComp.support_query.
Support-aware bind congruence: if two continuations agree on all elements in the support
of mx, the resulting bind computations are equal.
Finite version of support for when oracles have a finite set of possible outputs.
NOTE: we can't use simulateQ because Finset lacks a Monad instance.
The output distribution of mx when queries follow the specified distribution.
NOTE: currently proofs using this should reduce to simulateQ. A full API would be better
Instances For
Embed OracleComp into SPMF by mapping queries to uniform distributions over their range.
An output has non-zero probability in evalDist iff it is in computation support.
Alias of the forward direction of OracleComp.mem_support_evalDist_iff.
An output has non-zero probability in evalDist iff it is in computation support.
Alias of the reverse direction of OracleComp.mem_support_evalDist_iff.
An output has non-zero probability in evalDist iff it is in computation support.
Finite-support variant of mem_support_evalDist_iff.
Alias of the reverse direction of OracleComp.mem_support_evalDist_iff'.
Finite-support variant of mem_support_evalDist_iff.
Alias of the forward direction of OracleComp.mem_support_evalDist_iff'.
Finite-support variant of mem_support_evalDist_iff.
If a StateT oracle implementation preserves distributions (each oracle query produces a
uniform distribution after discarding state), then simulateQ followed by run' preserves
evalDist. This is the key lemma for security proofs: it shows that stateful oracle
implementations (e.g. counting/logging oracles) don't change outcome probabilities.
Stronger version with computational hypothesis: if the implementation passes through
queries exactly, then simulateQ preserves evalDist.
Corollary for probOutput: stateful simulation preserves output probabilities.
Corollary for probEvent: stateful simulation preserves event probabilities.