Lifting unary Std.Do triples to relational couplings #
Two OracleComp computations that are independently correct (each satisfying a unary
Std.Do.Triple) can always be paired via the product coupling, since every
OracleComp distribution sums to probability 1 (HasEvalPMF).
This file provides the "unary → relational" bridge:
relTriple_prod_of_wpProp— two unarywpPropwitnesses give a relational triple on the product postcondition.relTriple_prod_of_triple— same statement, phrased directly in terms ofStd.Do.Triple.relTriple_prod— a slightly stronger variant takingsupport-style postconditions.
These lemmas let proofs established against the stateful Std.Do/mvcgen proof mode
be composed into relational arguments (e.g. game-hopping reductions) without redoing
the underlying analysis.
Core lift: two support-style unary postconditions combine into a relational
coupling. The product coupling evalDist oa ⊗ evalDist ob witnesses the conjunction,
using HasEvalPMF to ensure neither side has failure mass.
wpProp-phrased version of the product lift.
Std.Do.Triple-phrased version of the product lift. Two independent Std.Do
triples with pure precondition True combine into a RelTriple over the product
postcondition.
Relational triples are monotone in the postcondition, so a product coupling can be weakened to any relation implied by the conjunction of independent postconditions.