Specifications¶
In percy we use specification objects to tell synthesizers both what and
how to synthesize. Specifications are implemented by the
synth_spec
class, which can be found under <percy/spec.hpp>
.
We can specify the functions to synthesize, but we also control some optional
parameters such as conflict limits, and various symmetry breaking flags.
Symmetry breaking is used to rule out certain “symmetric” solutions. Often
we’re not interested a solution if it is symmetric to one we have already
found. 1 Ruling out such solutions makes the search space smaller and thus
speeds up synthesis. Note that the symmetry breaking flags should be
interpreted as hints and not as law: they may not be implemented in all
synthesizers. In fact, depending on the implementation, not all flags may apply
to some synthesizers’ synthesis process.
Note that synth_spec
takes a template parameter. This parameter
specifies the type of functions to synthesize (i.e. static or dynamic kitty
truth tables).
Warning
doxygenclass: Cannot find class “percy::synth_spec” in doxygen xml output for project “percy” from directory: xml
- 1
An example would be a solution in which we simply swap two inputs.