Stateful simulation with private randomness #
An external oracle's invariant or state simulation remains valid when clients also draw private
randomness. Private draws leave oracle state untouched, and independent sampling commutes with
the distribution relating two state representations. These are specializations of the existing
OracleComp rules to the disjoint-sum interface, with no additional program induction.
Main results #
Cslib.ProbOracleComp.run_interpret_invariant: external invariants survive private sampling.Cslib.ProbOracleComp.run_interpret_simulation: local joint-state simulation suffices.Cslib.ProbOracleComp.run_interpret_map_state_of_invariant: state representation on an invariant.Cslib.ProbOracleComp.run_interpret_map_state: deterministic representation of oracle state.Cslib.ProbOracleComp.run_interpret_map_response_state: represent replies and oracle state, leaving private samples unchanged.Cslib.ProbOracleComp.run_interpret_readOnly: preserve a fixed external environment.Cslib.ProbOracleComp.run_interpret_run_interpret: a handler with private coins and external calls, followed by the external oracle, is one stateful handler on the joint state.
References #
Adapts the cslib crypto branch's state simulation API at
5ff69ca93402e7c947208dc56396d6d86203ccd8 to the typed sum of sampling and external calls.
Reading a fixed external environment retains it, independently of the client's private draws.
An external oracle's invariant is unaffected by the client's private sampling.
A local probabilistic state simulation extends to clients with fresh private samples.
Re-encode private state on invariant states while retaining independent private samples.
A deterministic state representation commuting with external calls commutes with the whole randomized adaptive program, retaining the result and represented private state.
Reply and state representations preserve randomized adaptive execution. Private samples are forwarded unchanged; only external replies and the oracle's state are represented.
A stateful handler that draws private coins and calls an external oracle, followed by that oracle, is one stateful handler on the joint state. Private draws stay fresh, and the result, the handler's state and the external oracle's state are retained jointly.