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