Circuit simulation with shared context #
An operation gadget can read a shared block of ambient inputs as well as its ordinary arguments. This permits a nullary dictionary term to depend on ambient variables, as in Waring decompositions. All gadgets read the same input block; no context gates are added.
Compilation first adds context arguments to each line, then uses Program.simulate through
Circuit.simulate. Thus the existing wire-renaming and gate-replacement machinery handles
sharing and output wiring. Costs count every gadget gate, including gates unused by outputs.
Main definitions #
Cslib.Circuits.Signature.withContext: prepend ambient inputs to every operation's arguments.Cslib.Circuits.Circuit.withContext: pass the same ambient inputs to every gate.Cslib.Circuits.Circuit.simulateWithContext: replace each operation by a contextual gadget.
Main results #
Cslib.Circuits.Circuit.eval_simulateWithContext: exact semantics for every output.Cslib.Circuits.Circuit.cost_program_simulateWithContext: exact arbitrary weighted cost.
References #
- Ported from Translation/Contextual.lean in S. Schlesinger, Algebraic circuit formalizations in Complexitylib, using native circuit simulation.
Add a q-input context before each operation's ordinary arguments.
Instances For
Prepend references to the ambient input block to a line's arguments.
Instances For
Every gate receives the shared context, followed by its original arguments.
Instances For
Adding context keeps the number of gates.
Evaluating a context-bearing circuit fixes the same context in every operation.
Contextual simulation computes every output with the supplied gadget semantics.