Executable FinRatPMF Semantics for OracleComp #
This file provides a computable oracle evaluator using FinRatPMF.Raw and proves that its
denotational semantics agree with the existing evalDist semantics of OracleComp.
def
FinRatPMF.finRatImpl
{ι : Type u}
{spec : OracleSpec ι}
[spec.Inhabited]
[(t : spec.Domain) → FinEnum (spec.Range t)]
:
Computable query implementation using the executable FinRatPMF.Raw monad.
Instances For
@[implicit_reducible]
def
FinRatPMF.finRatImpl.instSpecFintypeOfFinEnum
{ι : Type u}
{spec : OracleSpec ι}
[(t : spec.Domain) → FinEnum (spec.Range t)]
:
spec.Fintype
Instances For
@[simp]
theorem
FinRatPMF.finRatImpl.toPMF_apply
{ι : Type u}
{spec : OracleSpec ι}
[spec.Inhabited]
[(t : spec.Domain) → FinEnum (spec.Range t)]
(t : spec.Domain)
:
@[simp]
theorem
FinRatPMF.finRatImpl.evalDist_apply
{ι : Type u}
{spec : OracleSpec ι}
[spec.Inhabited]
[(t : spec.Domain) → FinEnum (spec.Range t)]
(t : spec.Domain)
:
@[simp]
theorem
FinRatPMF.finRatImpl.evalDist_simulateQ
{ι : Type u}
{spec : OracleSpec ι}
[spec.Inhabited]
[(t : spec.Domain) → FinEnum (spec.Range t)]
{α : Type v}
(oa : OracleComp spec α)
:
@[simp]
theorem
FinRatPMF.finRatImpl.probOutput_simulateQ
{ι : Type u}
{spec : OracleSpec ι}
[spec.Inhabited]
[(t : spec.Domain) → FinEnum (spec.Range t)]
{α : Type v}
(oa : OracleComp spec α)
(x : α)
:
@[simp]
theorem
FinRatPMF.finRatImpl.probEvent_simulateQ
{ι : Type u}
{spec : OracleSpec ι}
[spec.Inhabited]
[(t : spec.Domain) → FinEnum (spec.Range t)]
{α : Type v}
(oa : OracleComp spec α)
(p : α → Prop)
:
@[simp]
theorem
FinRatPMF.finRatImpl.support_simulateQ
{ι : Type u}
{spec : OracleSpec ι}
[spec.Inhabited]
[(t : spec.Domain) → FinEnum (spec.Range t)]
{α : Type v}
(oa : OracleComp spec α)
:
@[simp]
theorem
FinRatPMF.finRatImpl.finSupport_simulateQ
{ι : Type u}
{spec : OracleSpec ι}
[spec.Inhabited]
[(t : spec.Domain) → FinEnum (spec.Range t)]
{α : Type v}
[DecidableEq α]
(oa : OracleComp spec α)
: