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
Equations
- OracleComp.supportWhen o mx = simulateQ o mx
Instances For
The support instance for OracleComp, defined as
Equations
- OracleComp.hasEvalSet = { toSet := simulateQ' fun (x : spec.Domain) => Set.univ }
Alias of OracleComp.support_query.
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.
Equations
- One or more equations did not get rendered due to their size.
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
Equations
- OracleComp.evalDistWhen d mx = simulateQ d mx
Instances For
Embed OracleComp into SPMF by mapping queries to uniform distributions over their range.
Equations
- One or more equations did not get rendered due to their size.
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.