Structures For Tracking a Computation's Oracle Queries #
This file defines types like QueryLog and QueryCache for use with
simulation oracles and implementation transformers defined in the same directory.
Type to represent a cache of queries to oracles in spec.
Defined to be a function from (indexed) inputs to an optional output.
Instances For
Partial Order #
A QueryCache carries a natural partial order where c₁ ≤ c₂ means every cached entry
in c₁ also appears (with the same value) in c₂. The empty cache is the bottom element.
Query membership #
Check whether a query t has a cached response.
Instances For
Conversion to a set of query-response pairs #
The set of all (query, response) pairs stored in the cache.
Instances For
Number of live entries in a query cache, as an ℝ≥0∞ resource.
Instances For
Cache update #
Add an index + input pair to the cache by updating the function
(wrapper around Function.update).
Instances For
Sum spec projections #
Project a cache for spec₁ + spec₂ onto spec₁.
Instances For
Project a cache for spec₁ + spec₂ onto spec₂.
Instances For
Embed a cache for spec₁ into one for spec₁ + spec₂.
Instances For
Embed a cache for spec₂ into one for spec₁ + spec₂.
Instances For
Simple wrapper in order to introduce the Monoid structure for countingOracle.
Marked as reducible and can generally be treated as just a function.
idx gives the "index" for a given input.
A QueryCount ι is a commutative monoid under pointwise addition; it is
exactly the trace-monoid value type used by QueryImpl.withCost, which
attaches a WriterT (QueryCount ι) m writer effect via the generic
QueryImpl.withTraceBefore primitive in
VCVio/OracleComp/QueryTracking/Tracing.lean.
Instances For
Instances For
Log of queries represented by a list of dependent product's tagging the oracle's index.
(t : spec.Domain) × (spec.Range t) is slightly more restricted as it doesn't
keep track of query ordering between different oracles.
A QueryLog spec is morally a free monoid on Idx spec.toPFunctor, with
identity [] and product (++). By Mathlib reducibility this is exactly
FreeMonoid (Idx spec.toPFunctor) = TraceList spec.toPFunctor, so a
trace-valued boundary description such as BoundaryAction.emit (in
VCVio/Interaction/UC/OpenProcess.lean) and a per-call QueryLog-valued
writer share the same underlying free-monoid carrier.
We do not declare a global Monoid (QueryLog spec) instance: doing so
would conflict with the [EmptyCollection ω] [Append ω] → Monad (WriterT ω M)
instance Mathlib already provides for WriterT (QueryLog spec) M, which the
existing WriterTBridge/mvcgen proof infrastructure relies on. The
QueryImpl.withTrace/withLogging API instead uses the Append-based
Monad (WriterT _ _) directly via QueryImpl.withTraceAppend.
Instances For
Query log with a single entry.
Instances For
Update a query log by adding a new element to the appropriate list. Note that this requires decidable equality on the indexing set.
Instances For
Get all the queries with inputs satisfying p
Instances For
Count the number of queries with inputs satisfying p.
Instances For
Check if an element was ever queried in a log of queries. Relies on decidable equality of the domain types of oracles.
Instances For
Get only the portion of the log for queries in spec₁.
Instances For
Get only the portion of the log for queries in spec₂.
Instances For
View a log for spec₁ as one for spec₁ ++ₒ spec₂ by inclusion.
Instances For
View a log for spec₂ as one for spec₁ ++ₒ spec₂ by inclusion.
Instances For
A store of pre-generated seed values for oracle queries, indexed by oracle.
Maps each oracle index i to a list of outputs List (spec.Range i).
Instances For
Replace the seed values at index i.
Instances For
Append a list of values to the seed at index i.
Instances For
Prepend a list of values to the seed at index i.
Instances For
Instances For
Take only the first n values of the seed at index i.
Instances For
Pop one value from index i, returning the consumed value and updated seed when nonempty.
Instances For
Construct a query seed from a list at a single index.