Append Operation for Simulation Oracles #
This file defines an operation SimOracle.append
that takes two simulation oracles so
and so'
from spec₁
and spec₂
respectively to a shared target spec specₜ
,
and constructs a new simulation oracle from spec₁ ++ spec₂
to specₜ
.
This operation is also compatible with the SubSpec
instances involving OracleSpec.append
.
For example if oa : OracleComp spec₁ α
is coerced to ↑oa : OracleComp (spec₁ ++ spec₂) α
,
then we have simulate' (so ++ₛₒ so') ↑oa s = simulate' so oa s.1
, as the additional
oracles from the coercion will never actually be called.
TODO: simp lemmas are not always applied properly, seemingly due to the free n
variable.
Given simulation oracles so
and so'
with source oracles spec₁
and spec₂
respectively,
with the same target oracles specₜ
, construct a new simulation oracle from specₜ
,
answering queries to either oracle set with queries to the corresponding simulation oracle.
NOTE: n
can't be inferred from the explicit parameters, the use case needs to give context
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- SimOracle.«term_++ₛₒ_» = Lean.ParserDescr.trailingNode `SimOracle.«term_++ₛₒ_» 65 65 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ++ₛₒ ") (Lean.ParserDescr.cat `term 66))