Documentation

VCVio.OracleComp.SimSemantics.WriterT

Simulation using WriterT Monad Transformers #

Lemmas about simulateQ with output monad WriterT ω (OracleComp spec) for some ω

Note we only handle monoid version of WriterT, append should be added eventually.

theorem OracleComp.fst_map_writerT_run_simulateQ {ι : Type u} {spec : OracleSpec ι} {α ω : Type u} [Monoid ω] {so : QueryImpl spec (WriterT ω (OracleComp spec))} (hso : ∀ {α : Type u} (q : spec.OracleQuery α), Prod.fst <$> (so.impl q).run = liftM q) (oa : OracleComp spec α) :
theorem OracleComp.probFailure_writerT_run_simulateQ {ι : Type u} {spec : OracleSpec ι} {α ω : Type u} [Monoid ω] [spec.FiniteRange] {so : QueryImpl spec (WriterT ω (OracleComp spec))} (hso : ∀ {α : Type u} (q : spec.OracleQuery α), Prod.fst <$> (so.impl q).run = liftM q) (hso' : ∀ {α : Type u} (q : spec.OracleQuery α), [⊥|(so.impl q).run] = 0) (oa : OracleComp spec α) :
theorem OracleComp.neverFails_writerT_run_simulateQ_iff {ι : Type u} {spec : OracleSpec ι} {α ω : Type u} [Monoid ω] {so : QueryImpl spec (WriterT ω (OracleComp spec))} (hso : ∀ {α : Type u} (q : spec.OracleQuery α), (Prod.fst <$> (so.impl q).run).support = ) (hso' : ∀ {α : Type u} (q : spec.OracleQuery α), (so.impl q).run.neverFails) (oa : OracleComp spec α) :