Reusing circuits in synthesis arguments #
Ordered families let each member of a synthesized family use all preceding members, with the
total budget given by the sum of the step budgets (Synthesis.ordered_family). Applied to the
gates of a program, they rebuild the program from gatewise bounds (Program.synthesis_of_steps).
In particular a concrete circuit supplies a synthesis bound for its designated outputs, which
connects circuit composition with constructions using shared wires.
The rules Synthesis.with_sources, Synthesis.sequence and Synthesis.ordered_family, and the
program lemmas Program.wireFunction_mem_before, Program.synthesis_step and
Program.synthesis_of_steps, come from Cslib.Computability.Circuit.Synthesis at commit
2a4389b of the author's CSLib fork (branch complexitylib-integration); upstream CSLib does not
have them.
Compose an indexed sequence of syntheses, adding their gate budgets.
Synthesize a family in order, allowing each function to use all preceding ones.
Each program gate can be synthesized from the inputs and preceding gates.
Rebuild a program from gatewise synthesis bounds, retaining every wire function.
A circuit computing f supplies a synthesis bound for all coordinates of f.